我有进行大量小型提交的习惯,我对此表示满意。但是,我不时要使用一堆这些线性提交,并将它们折叠在一起,成为只有一次提交并能够编写新提交消息的功能。
我已经研究过文档,但对我来说似乎有点神秘。有人知道该怎么做吗?
Answers:
假设您要重写树的历史,直到(但不包括)commit为止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
merge-basemaster和您的topic分支的。如果分支上有十个提交,而只想合并前五个,则最后一个好的提交将是HEAD~5。
git checkout -b my_squashed_branch。
git push -f。
您可以使用以下方法将任意数量的提交压缩为一个提交
git rebase --interactive <commit>
-i与相同--interactive,唯一的区别是push。