84

我做了以下事情(我将其与现实进行了比较):

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

因此,原始分支Branch1之间的实际区别只是对File2的修改。

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

4

3 回答 3

177

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

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

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

于 2013-05-21T18:25:47.680 回答
10

这是一个简单的 git diff

git diff --name-only SHA1 SHA2

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

或者你可以做

git diff --name-only develop...

将您的分支与develop分支进行比较

于 2013-05-21T17:18:48.663 回答
0

我会在最后两个提交的基础上进行交互式 rebaseHEAD~2并将其压缩在一起。假设您想保持历史记录原样Branch1并简化它Branch2,请执行以下操作(当前分支Branch1):

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

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

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

以及许多解释性评论如何变基。将最后一次提交更改为 asquash并关闭编辑器。

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

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

更改文件2

关闭它,你就完成了,两个提交都被压缩在一起Branch2Branch1保留你的原始历史记录。请注意,如果您不需要保留原始历史记录,您可以跳过签出Branch2并直接处理Branch1. 仅当您尚未发布最后两个提交时才这样做Branch1

于 2018-07-10T17:36:57.157 回答