Я начал работу над новой функцией, и после кодирования немного, я решил, что эта функция должна быть в отдельной ветке.
Как перенести существующие незафиксированные изменения в новую ветку и reset мой текущий?
Я хочу reset мою текущую ветку, сохраняя существующую работу над новой функцией.
Используйте следующее:
git checkout -b <new-branch>
Это оставит вашу текущую ветку как есть, создаст и проверит новую ветку и сохранит все ваши изменения. Затем вы можете совершить фиксацию с помощью:
git add <files>
и передайте новую ветку с помощью:
git commit -m "<Brief description of this commit>"
Изменения в рабочем каталоге и изменения, поставленные в индексе, еще не принадлежат ни одной ветке. Это изменится, когда эти изменения закончились.
У вас нет reset исходной ветки, она остается такой, какая есть. Последняя фиксация на <old-branch>
будет по-прежнему одинаковой. Поэтому вы checkout -b
и затем зафиксируете.
В качестве альтернативы:
Сохраните текущие изменения в темпе:
$ git stash
Создайте новую ветку на основе этого тайника и переключитесь на новую ветку:
$ git stash branch <new-branch> stash@{0}
Совет. Используйте клавишу табуляции, чтобы уменьшить ввод имени кошелька.
git stash apply
.
Если вы делали коммиты на своей основной ветке во время кодировки, но теперь вы хотите переместить эти коммиты в другую ветку:
Скопируйте текущую историю на новую ветку, внеся также любые незафиксированные изменения:
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
Предупреждение. Похоже, что git branch -f master origin/master
сбросит информацию отслеживания для этой ветки. Поэтому, если вы сконфигурировали master
ветвь, чтобы нажать ее куда-то, кроме origin/master
эта конфигурация будет потеряна.
Альтернативой является использование этой техники сброса. Но эти инструкции будут отбрасывать любые незафиксированные изменения, которые у вас есть. Если вы хотите сохранить их, сначала спрячьте их и разблокируйте их в конце.
Если вы сделаете это, вы также можете выбрать виджет для одиночного фиксации. Я часто это делаю, когда начинаю работать с мастером, а затем хочу создать локальную ветвь, прежде чем я подниму свое начало /.
git cherry-pick <commitID>
Здесь вы можете многое сделать с помощью cherry-pick, как описано здесь, но это может быть прецедентом для вас.
Общий сценарий следующий: я забыл создать новый филиал для новой функции и выполнял всю работу в старой ветки функции. Я выполнил всю "старую" работу в мастер-ветке, и хочу, чтобы моя новая ветвь развивалась от "мастера". Я не сделал ни одной фиксации своей новой работы. Вот структура ветки: "master" → "Old_feature"
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
git checkout -b <new branch>
изменяется там, где эти изменения заканчиваются.