在Git中获取两个分支之间的区别

时间:2013-05-21 17:14:37

标签: git

我做了以下(我将其简化为与现实相比):

  • 创建了一个分支 Branch1 ,切换到它
  • 添加了文件 File1 并修改了现有文件 File2 并提交了此
  • 发现我不需要 File1 ,删除它并提交此

因此,原始分支 Branch1 之间的实际差异仅是对 File2 的修改。

我希望得到分支之间的实际差异并输入 Branch2 。一般来说,我想摆脱添加/删除 File1 的必要历史记录。

3 个答案:

答案 0 :(得分:99)

我们假设你开始分支master。然后你可以这样做:

git diff master Branch1 > ../patchfile
git checkout Branch2    
git apply ../patchfile

或者,如果您的目标是重写历史记录,那么您可以使用interactive rebase来压缩提交。

答案 1 :(得分:6)

这是一个简单的git diff

git diff --name-only SHA1 SHA2

其中SHA1 / 2是每个分支顶部的2个提交的哈希值。

或者你可以做到

git diff --name-only develop...

将您的分支与develop分支

进行比较

答案 2 :(得分:0)

我将基于HEAD~2进行交互式重新构建,并将最后两个提交一起压缩。假设您希望保持历史记录在Branch1中并在Branch2中进行简化,请执行以下操作(当前分支Branch1):

git checkout -b Branch2
git rebase -i 'HEAD~2'

将打开一个编辑器,显示类似

pick 1b58da0 Added File1, changed File2
pick d3f4f51 Delete File1

以及许多解释性评论,说明重新调整的工作原理。将最后一次提交更改为squash,然后关闭编辑器。

pick 1b58da0 Added File1, changed File2
squash d3f4f51 Delete File1

将打开一个新的编辑器,您可以在其中指定新的提交消息。现在可能只需阅读

  

更改的文件2

关闭它,您完成了,两个提交都被压缩在Branch2上,Branch1保留了您的原始历史记录。请注意,如果您不需要保留原始历史记录,则可以跳过检出Branch2并直接在Branch1上进行操作。仅当您尚未在Branch1上发布最后两次提交时,才这样做。