`git rebase`没有更新分支?

问题描述 投票:1回答:2

我有这个:

        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
2个回答
2
投票

你正在做的git rebase的版本,接受bar分支上的所有提交,这些提交尚未在master上,并将它们写入master。这是通过D提交F,这不是你想要的,因为它不会跳过提交D。一种解决方案是使用--onto标志:

git checkout bar
git rebase --onto master foo

这个版本的rebase将接受分支bar上的所有提交,但不会在分支foo上进行,并将它们重写到master上。这将导致你想要的bar的历史。


2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.