2012-06-06 40 views
7

对于代码中的每个缺陷,我创建单独的分支。当故障修复我合并在主这个分支,所以我有历史就像如下图所示(我们看到修复两个分支):获取任何合并分支的git diff

  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)之间的差异)在任何时间点(例如对于过去的任何闭合缺陷)。

更新:实际的问题是如何计算出来的adef SHA summs执行下一个明显的diff命令diff <commit> <commit>

+0

就像一条评论。塑料SCM(www,plasticscm.com)完全符合每个任务/缺陷模式的分支。使用塑料,你可以右键点击一个分支,然后按diff分支。使用命令行,你可以做'cm diff ' –

回答

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 
+0

对,我想在' .. '之间进行更改,问题是如果找不到'a'和'd'的SHA, –

+0

@AlexanderNikolayev:查看更新的答案。 – eckes

+1

不应该是'git diff .. '?因为你想要包含'1'和'a'的差异(这是分支开发的一部分)。 – Shahbaz

1

什么:

git diff <commit> <commit> 

凡提交的参数是实际提交的SHA校验。

+1

是的,但如何找出这些提交的SHA校验和? –

+0

你可以从'git log'中检查它 –

0

如果你想看看有什么变化特性分支介绍,它已被合并后,你只需运行:

git diff HEAD^..HEAD 

master分支。这表明HEAD(合并提交)第一个父代与HEAD之间的差异,有效地显示了整个功能分支合并带入主分支的差异。

没有必要把事情复杂:)