Git перебазировать дочернюю ветку на главную - PullRequest
0 голосов
/ 29 марта 2020

У меня есть следующая ситуация в Git хранилище

   A - B [origin/master]
    \
     C [origin/X]
      \
       E - F [origin/Y]

Когда я запустил Y, я не понял, что у меня ветвится от X, я собирался перейти с master.

Как я могу перебазировать Y на мастер без , включая коммит C?

(Изменения X относятся к файлу, к которому не было прикосновения по коммитам на Y)

Я хотел бы в итоге следующее:

   A - B [origin/master]
    \   \
     \   E - F [origin/Y]
      \
       C [origin/X]  

Я пробовал git rebase master, и, похоже, ничего не изменилось, вывод был:

Current branch Y is up to date.

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Это легко сделать следующим образом:

git rebase --onto origin/master origin/X origin/Y

Учитывая, что вы используете удаленные ссылки, вы будете находиться на отдельном HEAD, поэтому вы должны сделать это, чтобы pu sh получило ветку в origin. ветвь Y:

git push origin -f HEAD:Y
0 голосов
/ 29 марта 2020

Как всегда в Git, вероятно, есть много способов добиться этого, однако должно работать следующее:

  1. В ветви Y сбросьте это значение на master: git reset --hard master.
  2. Cherry-выберите ваши коммиты: git cherry-pick C..F (при условии E и F - первые и последние идентификаторы коммитов в вашей ветке после C).

Отредактировано: как указывал @ eftshift0, у меня изначально были неправильные идентификаторы фиксации в моем операторе git cherry-pick - исправлено.

...