Переместите существующую, незафиксированную работу на новую ветку в Git
Я начал работу над новой функцией, и после кодирования немного, я решил, что эта функция должна быть в отдельной ветке.
Как перенести существующие незафиксированные изменения в новую ветку и reset мой текущий?
Я хочу reset мою текущую ветку, сохраняя существующую работу над новой функцией.
Ответы
Ответ 1
Используйте следующее:
git checkout -b <new-branch>
Это оставит вашу текущую ветку как есть, создаст и проверит новую ветку и сохранит все ваши изменения. Затем вы можете совершить фиксацию с помощью:
git add <files>
и передайте новую ветку с помощью:
git commit -m "<Brief description of this commit>"
Изменения в рабочем каталоге и изменения, поставленные в индексе, еще не принадлежат ни одной ветке. Это изменится, когда эти изменения закончились.
У вас нет reset исходной ветки, она остается такой, какая есть. Последняя фиксация на <old-branch>
будет по-прежнему одинаковой. Поэтому вы checkout -b
и затем зафиксируете.
Ответ 2
В качестве альтернативы:
-
Сохраните текущие изменения в темпе:
$ git stash
-
Создайте новую ветку на основе этого тайника и переключитесь на новую ветку:
$ git stash branch <new-branch> [email protected]{0}
Совет. Используйте клавишу табуляции, чтобы уменьшить ввод имени кошелька.
Ответ 3
Если вы делали коммиты на своей основной ветке во время кодировки, но теперь вы хотите переместить эти коммиты в другую ветку:
-
Скопируйте текущую историю на новую ветку, внеся также любые незафиксированные изменения:
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
эта конфигурация будет потеряна.
Альтернативой является использование этой техники сброса. Но эти инструкции будут отбрасывать любые незафиксированные изменения, которые у вас есть. Если вы хотите сохранить их, сначала спрячьте их и разблокируйте их в конце.
Ответ 4
Общий сценарий следующий: я забыл создать новый филиал для новой функции и выполнял всю работу в старой ветки функции. Я выполнил всю "старую" работу в мастер-ветке, и хочу, чтобы моя новая ветвь развивалась от "мастера". Я не сделал ни одной фиксации своей новой работы. Вот структура ветки: "master" → "Old_feature"
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
Ответ 5
Если вы сделаете это, вы также можете выбрать виджет для одиночного фиксации. Я часто это делаю, когда начинаю работать с мастером, а затем хочу создать локальную ветвь, прежде чем я подниму свое начало /.
git cherry-pick <commitID>
Здесь вы можете многое сделать с помощью cherry-pick, как описано здесь, но это может быть прецедентом для вас.
Ответ 6
Я использовал @Robin answer & перечисление всего, что я сделал,
git status <-- review/list uncommitted changes
git stash <-- stash uncommitted changes
git stash branch <new-branch> [email protected]{1} <-- create a branch from stash
git add . <-- add local changes
git status <-- review the status; ready to commit
git commit -m "local changes ..." <-- commit the changes
git branch --list <-- see list of branches incl the one created above
git status <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch> <-- switch back
! Если в репо более одного тайника, посмотрите, какой из них применить к новой ветке:
git stash list
[email protected]{0}: WIP on ...
[email protected]{1}: WIP on ...
и осмотреть индивидуальный тайник,
git stash show [email protected]{1}
Или проверить все тайники одновременно:
git stash list -p
Ответ 7
На самом деле есть действительно простой способ сделать это с помощью GitHub Desktop, теперь я не думаю, что это была функция раньше.
Все, что вам нужно сделать, - это переключиться на новую ветку в GitHub Desktop, и она предложит вам оставить свои изменения в текущей ветке (которая будет спрятана) или перенести ваши изменения с вами в новую ветку. Просто выберите второй вариант, чтобы внести изменения в новую ветку. Затем вы можете зафиксировать как обычно.
![GitHub Desktop]()
Ответ 8
Это может быть полезно для всех, кто использует инструменты для GIT
Команда
Переключить ветку - она переместит ваши изменения в новую ветку. Затем вы можете зафиксировать изменения.
$ git checkout -b <new-branch>
TortoiseGit
Щелкните правой кнопкой мыши по вашему хранилищу и затем используйте TortoiseGit-> Switch/Checkout
![enter image description here]()
SourceTree
Используйте кнопку "Оформить заказ" для переключения ветки. Вы увидите кнопку "Оформить заказ" вверху после нажатия на ветку. Изменения из текущей ветки будут применены автоматически. Тогда вы можете их зафиксировать.
![enter image description here]()