在Git上将一组提交合并为一个
我有做大量小提交的习惯,我很好。 但我希望不时地接受一堆线性提交并将它们合并为一个提交,并提供一个新的提交消息。
我查看了文档,但对我来说似乎有点神秘。 有谁知道如何做到这一点?
假设你想重写树的历史,直到(但不包括)提交a739b0d
。
export EDITOR=vim # or your favorite editor
git rebase a739b0d --interactive
请务必先阅读交互式重新印刷。
假设你不关心保留任何现有的提交消息,那么你可以使用一个漂亮(快速)的git配方。 首先,确保您的分支已签出。
git checkout <branch-to-squash>
为了安全起见,让我们标记当前提交。
git tag my-branch-backup
接下来,将分支HEAD移回到您最后一次正确的提交(不修改工作空间或索引)。 编辑:最后一个好提交是你想保留的分支上最近的提交。
git reset --soft <last-good-commit>
使用git status
,您会注意到您的功能分支上的所有更改都已进行。 剩下要做的就是......
git commit
这种方法非常适合整合冗长,复杂的git历史和粗糙的合并。 另外,还没有合并/重组冲突来解决!
现在,如果你需要保留任何现有的提交消息或者做比上面提供的更多的东西,你可以使用git rebase --interactive
。
解决方案派生自:http://makandracards.com/makandra/527-squash-several-git-commits-into-a-single-commit
参考:http://git-scm.com/docs/git-reset
参考:http://git-scm.com/docs/git-rebase
使用命令git rebase -i <commit>
其中<commit>
是上次稳定提交的SHA。
这将把你带到你的编辑器中,你可以替换自从你作为参数包含的<commit>
到交互式rebase命令后的每个提交之后的标签pick
。 在你想开始崩溃的命令上,用reword
替换pick
,然后为每个你想要崩溃的提交,用fixup
替换pick
。 保存,然后您将被允许提供新的提交消息。
上一篇: Collapsing a Group of Commits into One on Git
下一篇: How to replace N