所以我遇到了一个情况,有一个主分支和一个继续它的错误修复分支。我尝试压缩 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 并且仍然有错误修复继续压缩的主分支。
Jubob 关于共享历史的观点非常重要,因为强烈建议不要重新调整或压缩共享提交。
我假设您正在使用本地提交。
假设你是这样开始的:
[master] A---B---C---D
\
[bugfix] 1---2---3
Run Code Online (Sandbox Code Playgroud)
你决定压缩B,C并D进入一个新的提交D'
[master] A---D'
\
[bugfix] B---C---D---1---2---3
Run Code Online (Sandbox Code Playgroud)
请注意,提交B,C并D保留在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不应包含该提交。