我做了以下事情(我将其与现实进行了比较):
- 创建了一个分支Branch1,切换到它
- 添加了文件File1并修改了现有文件File2并提交了这个
- 发现我不需要File1,将其删除并提交
因此,原始分支和Branch1之间的实际区别只是对File2的修改。
我想得到分支之间的实际差异并放入Branch2。一般来说,我想摆脱不必要的添加/删除File1的历史。
我做了以下事情(我将其与现实进行了比较):
因此,原始分支和Branch1之间的实际区别只是对File2的修改。
我想得到分支之间的实际差异并放入Branch2。一般来说,我想摆脱不必要的添加/删除File1的历史。
假设您从分支开始master
。然后你可以这样做:
git diff master Branch1 > ../patchfile
git checkout Branch2
git apply ../patchfile
或者,如果您的目标是重写历史记录,那么您可以使用交互式 rebase来压缩提交。
这是一个简单的 git diff
git diff --name-only SHA1 SHA2
其中 SHA1/2 是每个分支顶部的 2 个提交的哈希值。
或者你可以做
git diff --name-only develop...
将您的分支与develop
分支进行比较
我会在最后两个提交的基础上进行交互式 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
关闭它,你就完成了,两个提交都被压缩在一起Branch2
并Branch1
保留你的原始历史记录。请注意,如果您不需要保留原始历史记录,您可以跳过签出Branch2
并直接处理Branch1
. 仅当您尚未发布最后两个提交时才这样做Branch1
。