我们常见的开发工作流程是签出分支b
,向其提交一堆,然后将所有这些提交压缩为一个(仍然在b
上)。
但是,在rebase -i
进程中压缩所有提交时,经常会出现多个步骤的冲突。
我基本上希望将分支更改为一个提交,该提交代表b
我已经做了一些搜索,但我还没找到我正在寻找的东西。我不想merge --squash
,因为我们想在合并之前测试压扁的功能分支。
答案 0 :(得分:48)
如果您不需要提交信息,那么您可以进行软重置。然后文件保持不变,当你提交时,这个提交将在你重置的提交之上。
要查找重置为的提交:
git merge-base HEAD BRANCH_YOU_BRANCHED_FROM
然后
git reset --soft COMMIT_HASH
然后重新制作提交,或许:
git commit -am 'This is the new re-created one commit'
答案 1 :(得分:5)
这与Rasmus的答案相似,但分为三个应始终有效的步骤:
$ git merge feature1
$ git reset --soft HEAD@{1}
$ git commit -c feature1
说明:
答案 2 :(得分:1)
我已经专门为此任务创建了一个工具:
https://github.com/sheerun/git-squash
例如,您可以调用以下命令来压缩从“主”提交到HEAD的所有提交,无论沿途有多少冲突:
git squash master
当您“压缩并合并”拉取请求时,这基本上就是GitHub要做的事情。