Как разделить ветку после определенного коммита? - PullRequest
4 голосов
/ 06 сентября 2011

Я добавил несколько коммитов в конец ветки, но я решил, что они будут лучше в отдельной ветке функций.

Я мог бы сейчас создать ветку и отменитьизменения в основной ветке, но это создает грязную историю, и в идеале я хотел бы очистить ее перед отправкой в ​​удаленный репозиторий.

Есть ли лучший способ перейти от:

A-B-C-D-E

до:

A-B-C
     \
      D-E

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

Ответы [ 3 ]

7 голосов
/ 06 сентября 2011

Не уверен, почему все хотят сделать ребаз здесь. Все, что вам нужно сделать, это создать ветку объектов в вашей текущей голове, а затем сбросить ваш мастер обратно туда, где вы хотите:

git branch feature
git reset --hard HEAD~2
1 голос
/ 06 сентября 2011
  1. Создать новую ветку с HEAD git checkout:

    git checkout master
    git checkout -b branch

    Это создаетновая ветвь, которая содержит все коммиты master

  2. Удалите коммиты D и E из мастера с помощью интерактивного git rebase:

    git checkout master
    git rebase -i <SHA_A>

    В появившемся редакторе удалите строки с коммитами D и E.
    Если вы не меняли редактор, это Vim, поэтому нажимайте j , пока не окажетесь на линии с коммитом D, затем введите d d , чтобы удалить эту строку.То же самое с строкой коммита E.Когда вы закончите, введите : w q , чтобы закрыть редактор.

Готово!

Краткую справочную карту VIM можно найти здесь: http://tnerual.eriogerg.free.fr/vim.html

0 голосов
/ 06 сентября 2011

Полагаю, вы можете оформить коммит (git checkout sha), а затем перейти оттуда (git checkout -b newbranch).Я не проверял это.

EDIT : Просто понял, что вы хотите переместить коммиты после этого коммита в новую ветку.Я верю, что вы захотите посмотреть на это git rebase.

...