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

And*_*Ray 27 git rebase squash

对我们来说,一个常见的开发工作流程是checkout分支b,向它提交一堆,然后将所有这些提交压缩成一个(仍在b).

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

我本质上希望将分支更改为一个提交,该提交表示最终提交时存储库的状态 b

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

Ras*_*oss 50

如果您不需要提交信息,那么您可以进行软重置.然后文件保持不变,当你提交时,这个提交将在你重置的提交之上.

要查找重置为的提交:

git merge-base HEAD BRANCH_YOU_BRANCHED_FROM
Run Code Online (Sandbox Code Playgroud)

然后

git reset --soft COMMIT_HASH
Run Code Online (Sandbox Code Playgroud)

然后重新制作提交,或许:

git commit -am 'This is the new re-created one commit'
Run Code Online (Sandbox Code Playgroud)

  • 聪明!我喜欢 (2认同)

Col*_*inM 5

这与Rasmus的答案相似,但分为三个应始终有效的步骤:

$ git merge feature1
$ git reset --soft HEAD@{1}
$ git commit -c feature1
Run Code Online (Sandbox Code Playgroud)

说明:

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