>我有这个:
master
| foo
| |
v v bar
A---B---C---D |
v
---E---F---G
我想要这个:
master
| foo
| |
v v bar
A---B---C---D |
v
---E---F---G
所以我认为我需要做:
git checkout bar
git rebase master
但 Git 不这么认为:
Current branch bar is up-to-date.
并让一切保持原样。
我需要运行什么才能让 Git 做我想做的事?
您正在执行的git rebase
版本,将分支上尚未master
的所有提交bar
并将它们写入master
。这是通过F
D
提交,这不是您想要的,因为它不会跳过提交D
。一种解决方案是使用--onto
标志:
git checkout bar
git rebase --onto master foo
此版本的 rebase 会将分支上的所有提交bar
而不是分支foo
上的所有提交重写到master
上。这将生成您想要的bar
的确切历史记录。
提交D
包含在分支bar
中。 一种选择是执行交互式变基并从分支bar
中删除提交D
。
git checkout bar
git rebase -i master
- 在文本编辑器中删除提交
D
行 - 保存并关闭
只要您在提交D
(或包含提交D
(上有标记或分支(例如foo
(,您就不应该丢失它。 还要记住,如果D
之后的提交依赖于D
的变化,则会遇到冲突。