`git rebase` не обновляет ветку? - PullRequest
       8

`git rebase` не обновляет ветку?

0 голосов
/ 05 сентября 2018

У меня есть это:

        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 голосов
/ 05 сентября 2018

Версия git rebase, которую вы делаете, берет все коммиты на ветке bar, которые еще не на master, и записывает их на master. Это коммиты D до F, что не то, что вам нужно, потому что не пропускает коммит D. Одним из решений является использование флага --onto:

git checkout bar
git rebase --onto master foo

Эта версия rebase будет принимать все коммиты на ветке bar, но не на ветке foo и переписывать их на master. Это приведет именно к истории для bar, которую вы хотите.

0 голосов
/ 05 сентября 2018

Commit D входит в ветку bar. Один из вариантов - сделать интерактивный ребаз и удалить коммит D из ветви bar.

  1. git checkout bar
  2. git rebase -i master
  3. В текстовом редакторе удалить строку коммита D
  4. Сохранить и закрыть

Пока у вас есть тэг или ветвь на коммите D (или включая коммит D) (например, foo), вы не должны его терять. Также помните, что если коммиты после D зависят от изменений в D, вы получите конфликты.

...