Переместите существующую незафиксированную работу в новую ветку Git.
-
21-09-2019 - |
Вопрос
Я начал работу над новой функцией и, немного пописав код, решил, что эта функция должна быть в отдельной ветке.
Как мне переместить существующие незафиксированные изменения в новую ветку и сбросить текущую?
Я хочу сбросить текущую ветку, сохранив при этом существующую работу над новой функцией.
Решение
Используйте следующее:
git checkout -b <new-branch>
Это оставит вашу текущую ветку как есть, создаст и извлечет новую ветку и сохранит все ваши изменения.Затем вы можете сделать коммит с помощью:
git add <files>
и зафиксируйте свою новую ветку с помощью:
git commit -m "<Brief description of this commit>"
Изменения в рабочем каталоге и изменения, размещенные в индексе, пока не принадлежат ни одной ветке.Это меняет то, чем закончатся эти изменения.
Вы не перезагрузить ваша исходная ветка, она останется такой, какая есть.Последний коммит на <old-branch>
все равно будет то же самое.Поэтому вы checkout -b
а затем зафиксируйте.
Другие советы
Альтернативно:
Сохраните текущие изменения во временный тайник:
$ git stash
Создайте новую ветку на основе этого тайника и переключитесь на новую ветку:
$ git stash branch <new-branch> stash@{0}
Кончик:используйте клавишу табуляции, чтобы сократить ввод имени тайника.
Если вы совершали коммиты в вашей основной ветке, пока вы писали код, но теперь вы хотите переместить эти коммиты в другую ветку:
Скопируйте свою текущую историю в новую ветку, принеся с собой все незафиксированные изменения:
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 stash
git checkout master
git checkout -b "New_branch"
git stash apply
Если вы его зафиксируете, вы также можете выбрать одиночный идентификатор фиксации.Я делаю это часто, когда начинаю работу в master, а затем хочу создать локальную ветку, прежде чем перейти к исходному файлу /.
git cherry-pick <commitID>
С помощью Cherry Pick можно многое сделать, как описано. здесь, но это может быть вариантом использования для вас.
я использовал @Робин ответить и перечислить все, что я сделал,
git status <-- review/list uncommitted changes
git stash <-- stash uncommitted changes
git stash branch <new-branch> stash@{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
stash@{0}: WIP on ...
stash@{1}: WIP on ...
и осмотрите индивидуальный тайник,
git stash show stash@{1}
Или осмотрите все тайники сразу:
git stash list -p
На самом деле теперь есть очень простой способ сделать это с помощью GitHub Desktop, который, как мне кажется, раньше не был доступен.
Все, что вам нужно сделать, это переключиться на новую ветку в GitHub Desktop, и вам будет предложено оставить изменения в текущей ветке (которая будет спрятана) или перенести их с собой в новую ветку.Просто выберите второй вариант, чтобы внести изменения в новую ветку.Затем вы можете совершить коммит как обычно.
Это может быть полезно для всех, кто использует инструменты для GIT.
Команда
Переключить ветку — ваши изменения будут перенесены в новую ветку.Затем вы можете зафиксировать изменения.
$ git checkout -b <new-branch>
ЧерепахаGIT
Щелкните правой кнопкой мыши свой репозиторий и затем используйте TortoiseGit->Switch/Checkout.
Исходное дерево
Для переключения ветки используйте кнопку «Оформить заказ».Кнопку «Оформить заказ» вы увидите вверху после нажатия на ветку.Изменения из текущей ветки будут применены автоматически.Тогда вы сможете их совершить.