根据该分支上的提交数量,尤其是那些您想要摆脱的“无用”提交,您可以执行交互式 rebase 以摆脱那些您不想要的提交,或者您可以简单地挑选你真正想要保留的两个:
# 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 之上,您可以使用软重置或交互式变基来压缩它们。
问题是我想将提交 #1-4 压缩为一个提交并将该提交和提交 #5 合并到 origin/master 分支。
这实际上是交互式变基的完美用例。
从 dev 分支开始并运行 git rebase -i dev~5 以启动编辑器,其中包含最近 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 中,你就完成了。