对我们来说,一个常见的开发工作流是签出分支b
,向其提交一堆,然后将所有这些提交压缩为一个(仍然在b
上)。
然而,在压缩所有提交的rebase -i
过程中,多个步骤经常发生冲突。
我主要想将分支更改为一个提交,该提交表示b
上最后提交时存储库的状态
我做了一些搜索,但还没有找到我要找的东西。我不想merge --squash
,因为我们想在合并之前测试被压扁的特性分支。
如果您不需要提交信息,那么您可以进行软重置。然后文件保持原样,当您提交时,此提交将位于您重置为的提交之上。
查找要重置的提交:
git merge-base HEAD BRANCH_YOU_BRANCHED_FROM
然后
git reset --soft COMMIT_HASH
然后重新制定承诺,也许:
git commit -am 'This is the new re-created one commit'
这与Rasmus的答案相似,但分为三个步骤:
$ git merge feature1
$ git reset --soft HEAD@{1}
$ git commit -c feature1
说明:
- 合并并解决冲突
- 保留更改,但重置为旧标题
- 使用提交消息和特性分支最近提交的作者提交所有更改
我专门为这个任务创建了一个工具:
https://github.com/sheerun/git-squash
例如,您可以调用以下命令来压缩从"master"提交到HEAD的所有提交,无论一路上会有多少冲突:
git squash master
这基本上就是GitHub在"压缩并合并"拉取请求时所做的。