我做了以下(我将其简化为与现实相比):
因此,原始分支与 Branch1 之间的实际差异仅是对 File2 的修改。
我希望得到分支之间的实际差异并输入 Branch2 。一般来说,我想摆脱添加/删除 File1 的必要历史记录。
答案 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
上发布最后两次提交时,才这样做。