"git 变基"不更新分支?



>我有这个:

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。这是通过FD提交,这不是您想要的,因为它不会跳过提交D。一种解决方案是使用--onto标志:

git checkout bar
git rebase --onto master foo

此版本的 rebase 会将分支上的所有提交bar而不是分支foo上的所有提交重写到master上。这将生成您想要的bar的确切历史记录。

提交D包含在分支bar中。 一种选择是执行交互式变基并从分支bar中删除提交D

  1. git checkout bar
  2. git rebase -i master
  3. 在文本编辑器中删除提交D
  4. 保存并关闭

只要您在提交D(或包含提交D(上有标记或分支(例如foo(,您就不应该丢失它。 还要记住,如果D之后的提交依赖于D的变化,则会遇到冲突。

最新更新