Вопрос: Перемещение существующей, незавершенной работы в новую ветку в Git


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

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

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


2460


источник


Ответы:


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

git checkout -b <new-branch>

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

git add <files>

и передайте вашему новому филиалу:

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

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

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


2911



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

  1. Сохраните текущие изменения в таймере:

    $ git stash

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

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

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


245



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

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

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

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

    Например:

    git branch -f master origin/master
    

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

    git branch -f master HEAD~4
    

Предупреждение: Кажется, что git branch -f master origin/masterбудем сбросить информацию отслеживания для этой ветви. Поэтому, если вы настроили свой masterветку, чтобы нажать куда-то, кроме origin/masterто эта конфигурация будет потеряна.

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


34



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

git cherry-pick <commitID>

Существует много вы можете сделать с вишневым кирком, как описано Вот , но это может быть прецедентом для вас.


15