我们常见的开发工作流程是签出分支
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 在“压缩并合并”拉取请求时所做的事情。