我有一个大约20个提交的分支.
分支上的第一个SHA是分支上bc3c488...
的最后一个SHA2c2be6...
如何将所有提交合并在一起?
我想这样做而不使用交互式rebase,因为有很多提交.
我需要这个github Pull Request,我被要求合并我的提交.
需要这样做而不进行git merge --squash因为我需要在本地进行压缩而另一个开发人员进行合并并希望我在合并之前先进行压缩.
如果第一个 SHA 是 HEAD,您也可以使用这种方法:
git reset --soft $OLD_SHA; git add -A; git commit --amend --no-edit
Run Code Online (Sandbox Code Playgroud)
请注意,此命令将更改 repo 的历史记录。
如果您想压缩历史记录中间的提交:
|---* --- 0 --- 1 ---- 2 --- 3 --- * --- * --- * --- HEAD
Run Code Online (Sandbox Code Playgroud)
就像在这种情况下提交 1、2 和 3
我真的建议使用 rebase -i
交互式变基可以在这里提供帮助。
假设您的分支基于上游的主分支。(假设您的上游是由“上游”遥控器定义的)
做这个:
git rebase -i upstream/master
Run Code Online (Sandbox Code Playgroud)
如果需要更准确,“upstream/master”可以替换为任何 SHA。
git rebase -i bc3c488
Run Code Online (Sandbox Code Playgroud)
您将被置于由 $EDITOR 环境变量定义的编辑器中。将除最上面一行之外的每一行的“pick”更改为“squash”(或简称为“s”)。这将所有这些提交压缩为一个。
与针对另一行工作的任何合并或变基一样,存在代码冲突的可能性。如果发生这种情况,请执行“git status”以查看哪些文件存在冲突,编辑这些文件(冲突将用 <<< 和 >>> 符号分隔)并执行“git rebase --continue”
一次一次重放一次提交,如果您发现自己一遍又一遍地修复相同的冲突,请记住这一点(也有一些工具可以帮助解决此问题)。
然后,您将有机会编辑新压缩提交的提交消息。
使用 -f 推送到远程分支(这会重写您想要的历史记录,但要小心这一点)。
这是关于交互式变基的非常好的教程:https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase-i