如何压缩有孩子的分支上的提交

Ele*_*Ent 2 git rebase squash

所以我遇到了一个情况,有一个主分支和一个继续它的错误修复分支。我尝试压缩 master 上的一些提交,然后重新修复 bugfix,但遇到了合并冲突。正确的做法是什么?我在本地工作,没有远程。

它看起来像这样:

A - B - C - D - E - F [master]
                     \                 
                      G - H - I - J - K [bugfix]
Run Code Online (Sandbox Code Playgroud)

我想压缩 A - B - C - D - E - F 并且仍然有错误修复继续压缩的主分支。

Chr*_*ris 5

Jubob 关于共享历史的观点非常重要,因为强烈建议不要重新调整或压缩共享提交。

我假设您正在使用本地提交。

假设你是这样开始的:

[master] A---B---C---D
                      \
[bugfix]               1---2---3
Run Code Online (Sandbox Code Playgroud)

你决定压缩B,CD进入一个新的提交D'

[master] A---D'
          \
[bugfix]   B---C---D---1---2---3
Run Code Online (Sandbox Code Playgroud)

请注意,提交BCD保留在bugfix分支中。如果你简单地变bugfix基到master,Git 会尝试这样做:

[master] A---D'
              \
[bugfix]       B---C---D---1---2---3
Run Code Online (Sandbox Code Playgroud)

B但由、C和引入的更改D已包含在 中D'。你真正想要的最终结果是这样的:

[master] A---D'
              \
[bugfix]       1---2---3
Run Code Online (Sandbox Code Playgroud)

您可以通过以下--onto选项来完成此操作rebase

git rebase --onto master D bugfix
Run Code Online (Sandbox Code Playgroud)

D应该是最新的提交,因为在变基时bugfix不应包含该提交。