对于代码中的每个缺陷,我创建了单独的分支。当缺陷修复后,我将这个分支合并到master中,所以我的历史如下图所示(我们看到两个分支有修复):
defect1 fix defect2 fix
a---b---c---d e---f
/ \ / \
---o---1---x---y---z---2---o---3---w---4---o---
问题是如何在任何时间点(例如对于任何闭合缺陷)获取fix1(在分支开始(1)和分支结束(2)之间)或fix2(在(3)和(4)之间的差异)之间的差异在过去)。
更新:实际问题是如何计算a
和d
或e
和f
的SHA总和来执行下一个明显的差异命令diff <commit> <commit>
< / p>
答案 0 :(得分:6)
答案很简单:
git diff 1..d
这显示了defect1 fix
分支(即1
)的分支点与其结束(即d
)之间的差异。
要查找defect1 fix
分支的开头,请使用
git merge-base master defect1-fix-branch
如答案所示:https://stackoverflow.com/a/2458173/520162。
这会根据git merge-base
的文档为您1
。
defect1 fix
分支的结尾只是用它的名字来标识。因此,找到defect1 fix
中引入的所有差异,您需要执行
git diff 1..defect1-fix-branch
答案 1 :(得分:4)
注意:这与“Not able to think of a case where git diff master..lab
and git diff master...lab
would be different”中的详细内容相同,为:
git diff master...defect1-fix-branch
git diff A...B
相当于git diff $(git merge-base A B) B
答案 2 :(得分:1)
怎么样:
git diff <commit> <commit>
其中commit参数是实际提交的SHA校验和。
答案 3 :(得分:0)
如果要查看功能分支引入的更改,合并后,只需运行:
git diff HEAD^..HEAD
在master
分支上。这显示了HEAD(合并提交)第一个父级和HEAD之间的差异,有效地显示了整个功能分支合并带入主分支的差异。
不需要让事情变得复杂:)