Я начал некоторую работу над новой функцией и, немного подумав, решил, что эта функция должна быть в отдельной ветке.
Как переместить существующие незафиксированные изменения в новую ветку и сбросить текущую?
Я хочу сбросить текущую ветку, сохранив при этом существующую работу над новой функцией.
git
git-branch
git-stash
git-reset
Дейн О'Коннор
источник
источник
Ответы:
Используйте следующее:
Это оставит вашу текущую ветку как есть, создаст и извлечет новую ветку и сохранит все ваши изменения. Затем вы можете вносить изменения в файлы для фиксации:
и добавьте в свою новую ветку :
Изменения в рабочем каталоге и внесенные в индекс изменения еще не принадлежат ни одной ветви . Это изменяет ветку, в которой эти модификации заканчиваются.
Вы не сбрасываете исходную ветку, она остается как есть. Последний коммит
<old-branch>
останется прежним. Поэтому выcheckout -b
и потом совершаете.Обновление 2020 / Git 2.23
Git 2.23 добавляет новый
switch
подкоманду в попытке очистить часть путаницы, возникающей из-за перегруженного использованияcheckout
(переключение веток, восстановление файлов, отсоединение HEAD и т. Д.)Начиная с этой версии Git, замените вышеприведенную команду на:
Поведение идентично и остается неизменным.
источник
git checkout -b <new branch>
изменения, где эти изменения закончатся.git checkout .
/ удалят ихgit reset --hard
безвозвратноВ качестве альтернативы:
Сохранить текущие изменения во временном хранилище:
$ git stash
Создайте новую ветку на основе этого тайника и переключитесь на новую ветку:
$ git stash branch <new-branch> stash@{0}
Совет: используйте клавишу табуляции, чтобы уменьшить ввод имени тайника.
источник
git stash apply
.git checkout -b <new branch name>
git add -A
прежде чем копить.Если вы выполняли коммиты в своей основной ветке во время кодирования, но теперь хотите переместить эти коммиты в другую ветку, это быстрый способ:
Скопируйте свою текущую историю в новую ветвь, включая все незафиксированные изменения:
Теперь принудительно откатим исходную "грязную" ветку: (без переключения на нее)
Например:
или если вы сделали 4 коммита:
Предупреждение:
git branch -f master origin/master
будет сброс отслеживания информации для этой отрасли. Таким образом, если вы настроили своюmaster
ветвь для отправки в другое место,origin/master
то эта конфигурация будет потеряна.Предупреждение. Существует также опасность перебазирования после ветвления, которое описано здесь . Единственный способ избежать этого - создать новую историю с помощью cherry-pick. Эта ссылка описывает самый безопасный метод защиты от ошибок . Если у вас есть незафиксированные изменения, вы можете захотеть
git stash
в начале иgit stash pop
в конце.источник
Общий сценарий следующий: я забыл создать новую ветку для новой функции и делал всю работу в старой ветви функции. Я перенес всю «старую» работу в основную ветвь и хочу, чтобы моя новая ветвь выросла из «основной». Я не сделал ни одного коммита моей новой работы. Вот структура ветви: "master" -> "Old_feature"
источник
Если вы фиксируете его, вы также можете выбрать единственный идентификатор фиксации. Я делаю это часто, когда начинаю работу в мастере, а затем хочу создать локальную ветку, прежде чем я перейду к своему источнику /
Существует много возможностей, которые вы можете использовать с cherry-pick, как описано здесь , но это может быть полезным для вас.
источник
На самом деле есть действительно простой способ сделать это с помощью GitHub Desktop, теперь я не думаю, что это была функция раньше.
Все, что вам нужно сделать, - это переключиться на новую ветку в GitHub Desktop, и она предложит вам оставить свои изменения в текущей ветке (которая будет сохранена) или перенести ваши изменения с вами в новую ветку. Просто выберите второй вариант, чтобы внести изменения в новую ветку. Затем вы можете совершить как обычно.
источник
Это может быть полезно для всех, кто использует инструменты для GIT
команда
Переключить ветку - она переместит ваши изменения в новую ветку. Затем вы можете зафиксировать изменения.
TortoiseGit
Щелкните правой кнопкой мыши по вашему хранилищу и затем используйте TortoiseGit-> Switch / Checkout
SourceTree
Используйте кнопку «Оформить заказ» для переключения филиала. Вы увидите кнопку «Оформить заказ» вверху после нажатия на ветку. Изменения из текущей ветки будут применены автоматически. Тогда вы можете их совершить.
источник
Я использовал @Robin answer & перечисление всего, что я сделал,
! Если в репо более одного тайника, посмотрите, какой из них применить к новой ветке:
и осмотреть индивидуальный тайник,
Или проверить все тайники одновременно:
источник