Как переместить ветку назад в git? - PullRequest
45 голосов
/ 27 мая 2010

Название не очень понятно. Что мне на самом деле нужно часто делать, так это:

Допустим, у меня идет разработка с несколькими коммитами c1, c2, ... и 3 ветками A, B, C

c1--c2--c3--(B)--c4--(A,C)

Ветви A и C находятся в одном коммите.

Теперь я хочу, чтобы ветвь A вернулась туда, где B, чтобы она выглядела так:

c1--c2--c3--(A,B)--c4--(C)

Важно то, что это должно происходить локально и на GitHub.

Ответы [ 4 ]

65 голосов
/ 27 мая 2010

Используйте подкоманду сброса:

git checkout A
git reset --hard B
git push --force github

Как sidenote, вы должны быть осторожны при использовании git reset, когда ветка уже была перенесена в другое место. Это может вызвать проблемы у тех, кто уже проверил ваши изменения.

23 голосов
/ 27 мая 2010

Если в ветви A нет коммитов, то будет работать решение git reset --hard B , данное Брэмом Шенмейкером .

Однако, если есть коммиты ветви A, которые должны быть сохранены, то следующее должно сделать трюк:

  1. Сделайте резервную копию вашего репо (на всякий случай)
  2. git checkout A
  3. git rebase -i --onto B SHA1-A^

... где SHA1-A^ - идентификатор коммита родителя вашей ветки A

Подробнее см. Справочную страницу git rebase .

ПРИМЕЧАНИЕ: это переписывает историю (как всегда делает rebase). Особое внимание следует уделить, если ваша ветка A когда-либо была отправлена ​​в публичное репо.

4 голосов
/ 02 января 2016

Я обычно использую эту последовательность и нахожу ее самым простым способом:

git checkout B
git branch -f A B
1 голос
/ 27 мая 2010

Удалите ветку как локально, так и удаленно, заново создайте ветку, переместите ветку обратно на сервер.

git branch -d A
git push origin :heads/A
git branch B A
git push origin A:A

В качестве альтернативы вы можете использовать следующую команду для отмены последнего коммита.

git revert c4

Что сделает вашу временную шкалу похожей на:

c1--c2--c3--(B)
             \
              c4--(C)
               \
                (^c4)--(A)

где (^c4) - коммит, отменяющий c4

Я не рекомендую использовать rebase или revert на ветке, которая была перенесена в удаленное хранилище, это может создать массу проблем для вас или любого другого, использующего это хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...