以下是repro repo:https://github.com/sathishsoundharajan/git-diff
步骤
- 在github中创建了新的存储库
- 已创建主分支
- 将master.txt文件添加到master分支并提交
- 已从master创建名为feature branch的新分支
- 将feature.txt文件添加到功能分支并提交
- 切换到主分支
- 将新文件new-master.txt添加到master分支并提交(CommitId:https://github.com/sathishsoundharajan/git-diff/commit/593da755a9ea90b6f55bcc6d184f249218bf4170)
- 现在,出于某种原因,让我们假设我必须精心挑选这个提交到功能分支
- 切换到功能分支
- 使用
git cherry-pick 593da755a9ea90b6f55bcc6d184f249218bf4170
。Cherry在没有冲突的情况下被选中,但commit_id更改为https://github.com/sathishsoundharajan/git-diff/commit/e58427c82322d6a3ec933741887f5b8312981e11 - 现在,如果我们从feature分支向master提出pull请求/在master和feature分支之间获取git diff,我应该只在diff中看到feature.txt文件https://github.com/sathishsoundharajan/git-diff/pull/1
问题:
- 为什么在cherry-pick之后提交id发生了更改
- 我们可以停止cherry pick不创建新的提交id并重用现有的提交id吗
- 为什么在gitdiff中我看到了new-master.txt,尽管它已经在master分支中了
- 有没有办法让git不显示这种差异
- 有没有一种方法可以在不比较提交ID的情况下,通过比较文件中的实际更改来查看两个分支之间的差异
1,因为历史记录不同,因此出于安全/加密原因,ID不能相同。
2个,相关问题1。。。如果你有相同的ID,那就意味着你发现了碰撞(或者你正在产生完全相同的对象,就像git svn
所做的那样(。。。理论上是可能的,但是。。。。
3,因为在PR/MR中,您看到的不是两个分支的提示之间的差异,而是因为功能分支已启动,例如(如果您尝试git diff
与...
而不是..
(。如果你看到了分支的2个tlp之间的差异,代码审查将是地狱,因为你会看到MR/PR本身的变化,加上自MR/PR分支启动以来在目标分支中引入的变化(不要说随着更多的东西合并到目标分支,这些变化会随着时间的推移而变化(。谁会想那样工作?
4喜欢两个分支之间的差异吗?尝试使用..
而不是...
。现在,在github上?如果他们认为有必要,他们可能会提供选项,但我认为你不会发现很多客户会感兴趣和,那么这是关于它们的,而不是关于git的。
5你什么意思?