Переместить самые последние коммиты в новую ветку с помощью Git - PullRequest
4342 голосов
/ 27 октября 2009

Я хотел бы переместить последние несколько коммитов, которые я совершил, чтобы освоить, в новую ветвь и вернуть мастер до того, как эти коммиты были сделаны. К сожалению, мой Git-fu еще недостаточно силен, какая-нибудь помощь?

т.е. Как я могу пойти от этого

master A - B - C - D - E

к этому?

newbranch     C - D - E
             /
master A - B 

Ответы [ 13 ]

2 голосов
/ 01 июня 2018

1) Создайте новую ветку, которая переместит все ваши изменения в new_branch.

git checkout -b new_branch

2) Затем вернитесь к старой ветке.

git checkout master

3) Do git rebase

git rebase -i <short-hash-of-B-commit>

4) Тогда открытый редактор содержит информацию о последних 3 коммитах.

...
pick <C's hash> C
pick <D's hash> D
pick <E's hash> E
...

5) Измените pick на drop во всех этих 3 коммитах. Затем сохраните и закройте редактор.

...
drop <C's hash> C
drop <D's hash> D
drop <E's hash> E
...

6) Теперь последние 3 коммита удаляются из текущей ветви (master). Теперь принудительно нажмите на ветку со знаком + перед именем ветви.

git push origin +master
0 голосов
/ 17 июня 2019

Если вам просто нужно переместить все ваши не выдвинутые коммиты в новую ветку , тогда вам просто нужно,

  1. создать a новую ветку из текущей: git branch new-branch-name

  2. push ваш новый филиал : git push origin new-branch-name

  3. вернуть вашу старую (текущую) ветку в последнее нажатое / стабильное состояние: git reset --hard origin/old-branch-name

У некоторых людей также есть другие upstreams, а не origin, они должны использовать соответствующие upstream

0 голосов
/ 25 мая 2018

Вы можете сделать это всего за 3 простых шага, которые я использовал.

1) создайте новую ветку, где вы хотите зафиксировать недавнее обновление.

git branch <branch name>

2) Найти недавний Id коммит для коммита в новой ветке.

git log

3) Скопируйте это примечание id коммита, что список последних коммитов находится сверху так что вы можете найти свой коммит. Вы также найдете это через сообщение.

git cherry-pick d34bcef232f6c...

Вы также можете указать некоторый диапазон идентификатора коммита.

git cherry-pick d34bcef...86d2aec

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

Теперь вы можете нажать свой код

git push

...