Git压缩所有提交在分支中没有冲突

时间:2013-06-27 22:33:20

标签: git rebase squash

我们常见的开发工作流程是签出分支b,向其提交一堆,然后将所有这些提交压缩为一个(仍然在b上)。

但是,在rebase -i进程中压缩所有提交时,经常会出现多个步骤的冲突。

我基本上希望将分支更改为一个提交,该提交代表b

上最终提交时存储库的状态

我已经做了一些搜索,但我还没找到我正在寻找的东西。我不想merge --squash,因为我们想在合并之前测试压扁的功能分支。

3 个答案:

答案 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

说明:

  1. 合并并解决冲突
  2. 保持更改暂停,但重置为旧头
  3. 使用提交消息和来自功能分支最新提交的作者提交所有更改

答案 2 :(得分:1)

我已经专门为此任务创建了一个工具:

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

例如,您可以调用以下命令来压缩从“主”提交到HEAD的所有提交,无论沿途有多少冲突:

git squash master

当您“压缩并合并”拉取请求时,这基本上就是GitHub要做的事情。