对我们来说,一个常见的开发工作流程是检查分支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 所做的。