![](/img/trans.png)
[英]How can I merge multiple commits onto another branch as a single squashed commit?
[英]How to merge to another branch with only two commits and with one commit squashed?
我已经创建了一个开发分支,其中包含一些无用的提交。 现在,我想将提交合并到主线分支。 我在origin / master分支中想要的唯一提交是最新的提交,另一个将第一提交压缩为第二最新提交的提交。
编辑:很抱歉,如果不清楚,所以让我尝试使其更清楚。 假设我在dev分支中有5个commit。 我想将所有在dev分支中所做的更改合并到origin / master分支中。 问题是我想将1-4号提交压缩为一次提交,然后将该提交和5号提交合并到origin / master分支中。
根据该分支上的提交数量,尤其是要删除的那些“无用”提交,您可以进行交互式重新设置以删除不需要的提交,或者可以简单地挑选两个提交实际想保留:
# check out master and update it first
git checkout master
git merge origin/master
# cherry-pick the latest commit from the development branch
git cherry-pick dev-branch
# cherry-pick the other commit (use the hash from the log)
git cherry-pick theothercommitshash
之后,您可以将这两个提交干净地master
在master
之上,并且可以使用软重置或交互式变基来压缩它们。
问题是我想将1-4号提交压缩为一次提交,然后将该提交和5号提交合并到origin / master分支中。
这实际上是交互式重新基准的完美用例。
从dev分支开始,然后运行git rebase -i dev~5
以启动编辑器,并为后5次提交提供交互式的git rebase -i dev~5
计划。 它看起来应该像这样:
pick <hash1> Commit 1
pick <hash2> Commit 2
pick <hash3> Commit 3
pick <hash4> Commit 4
pick <hash5> Commit 5
将内部的三个pick
更改为squash
,如下所示:
pick <hash1> Commit 1
squash <hash2> Commit 2
squash <hash3> Commit 3
squash <hash4> Commit 4
pick <hash5> Commit 5
squash
基本上是指“接受提交但将其融合到先前的提交中”。 因此,在这种情况下,将按原样选择提交1,然后将提交2、3和4依次压入其中。 因此,您最终将获得一个包含所有4个提交更改的单个提交。
保存计划并退出编辑器以启动交互式重定基础,并在Git提示您执行此操作时针对已压缩的提交调整提交消息。 最终,您将只在分支上进行两次提交:压缩的提交,并在此基础上重新提交5个提交。
最后,您只需将分支合并到master中就可以了。
如果您不想将临时分支中的所有更改合并到master中,则可以使用git cherry-pick
:
git checkout master
# Create a new commit in branch master which is equal to the latest
# commit in my_dev_branch
git cherry-pick my_dev_branch
如果要从my_dev_branch
挑选两个提交并将其压入master
单个提交中,则需要--no-commit
:
git checkout master
git cherry-pick --no-commit <some-commit>
git cherry-pick --no-commit <another-commit>
# Now that all changes are in index, create a new commit
git commit
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.