我有这个:
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
的版本,接受bar
分支上的所有提交,这些提交尚未在master
上,并将它们写入master
。这是通过D
提交F
,这不是你想要的,因为它不会跳过提交D
。一种解决方案是使用--onto
标志:
git checkout bar
git rebase --onto master foo
这个版本的rebase将接受分支bar
上的所有提交,但不会在分支foo
上进行,并将它们重写到master
上。这将导致你想要的bar
的历史。
提交D
包含在分支bar
。一种选择是做interactive rebase并从分支D
删除提交bar
。
git checkout bar
git rebase -i master
D
的行只要您在提交D
(或包含提交D
)(例如foo
)上有标记或分支,您就不应该丢失它。还要记住,如果D
之后的提交依赖于D
的变化,你将会遇到冲突。