git rebase不更新分支吗?

时间:2018-09-05 19:33:43

标签: git rebase

我有这个:

        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做到我想要的?

2 个答案:

答案 0 :(得分:2)

提交D包含在分支bar中。一种选择是执行interactive rebase并从分支D删除提交bar

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

只要您在提交D(或包含提交D)(例如foo)上具有标签或分支,就不要丢失它。还请记住,如果D之后的提交取决于D中的更改,则会产生冲突。

答案 1 :(得分:2)

您正在执行的git rebase版本,将分支bar上尚未提交的所有提交master写入master中。这是DF的提交,这不是您想要的,因为它不会跳过提交D。一种解决方案是使用--onto标志:

git checkout bar
git rebase --onto master foo

此版本的rebase将在分支bar上而不是在分支foo上接受所有提交,并将它们重写到master上。这将精确地生成您想要的bar的历史记录。