Переместите существующую, незафиксированную работу на новую ветку в Git

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

Как перенести существующие незафиксированные изменения в новую ветку и reset мой текущий?

Я хочу reset мою текущую ветку, сохраняя существующую работу над новой функцией.

2227
задан Dane O'Connor 08 сент. '09 в 18:57
источник поделиться

4 ответов

Используйте следующее:

git checkout -b <new-branch>

Это оставит вашу текущую ветку как есть, создаст и проверит новую ветку и сохранит все ваши изменения. Затем вы можете совершить фиксацию с помощью:

git add <files>

и передайте новую ветку с помощью:

git commit -m "<Brief description of this commit>"

Изменения в рабочем каталоге и изменения, поставленные в индексе, еще не принадлежат ни одной ветке. Это изменится, когда эти изменения закончились.

У вас нет reset исходной ветки, она остается такой, какая есть. Последняя фиксация на <old-branch> будет по-прежнему одинаковой. Поэтому вы checkout -b и затем зафиксируете.

2650
ответ дан knittl 08 сент. '09 в 18:59
источник поделиться

В качестве альтернативы:

  • Сохраните текущие изменения в темпе:

    $ git stash

  • Создайте новую ветку на основе этого тайника и переключитесь на новую ветку:

    $ git stash branch <new-branch> stash@{0}

Совет. Используйте клавишу табуляции, чтобы уменьшить ввод имени кошелька.

214
ответ дан Robin Qiu 19 июня '15 в 3:18
источник поделиться

Если вы делали коммиты на своей основной ветке во время кодирования, но теперь вы хотите переместить эти коммиты в другую ветку:

  • Скопируйте текущую историю на новую ветку, внеся также любые незафиксированные изменения:

    git checkout -b <new-feature-branch>
    
  • Теперь заставьте исходную "грязную" ветвь отката: (без переключения на нее)

    git branch -f <previous-branch> <earlier-commit-id>
    

    Например:

    git branch -f master origin/master
    

    или если вы сделали 4 фиксации:

    git branch -f master HEAD~4
    
25
ответ дан joeytwiddle 12 февр. '16 в 10:44
источник поделиться

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

git cherry-pick <commitID>

Здесь вы можете многое сделать с помощью cherry-pick, как описано здесь, но это может быть прецедентом для вас.

13
ответ дан password 30 нояб. '15 в 23:58
источник поделиться

Другие вопросы по меткам