Git在没有冲突的情况下压缩分支中的所有提交



对我们来说,一个常见的开发工作流是签出分支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

说明:

  1. 合并并解决冲突
  2. 保留更改,但重置为旧标题
  3. 使用提交消息和特性分支最近提交的作者提交所有更改

我专门为这个任务创建了一个工具:

https://github.com/sheerun/git-squash

例如,您可以调用以下命令来压缩从"master"提交到HEAD的所有提交,无论一路上会有多少冲突:

git squash master

这基本上就是GitHub在"压缩并合并"拉取请求时所做的。

最新更新