Переместите существующую незафиксированную работу в новую ветку Git.

StackOverflow https://stackoverflow.com/questions/1394797

Вопрос

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

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

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

Это было полезно?

Решение

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

git checkout -b <new-branch>

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

git add <files>

и зафиксируйте свою новую ветку с помощью:

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

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

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

Другие советы

Альтернативно:

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

    $ git stash

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

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

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

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

  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 тогда эта конфигурация будет потеряна.

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

Общий сценарий следующий:Я забыл создать новую ветку для новой функции и выполнял всю работу в старой ветке функции.Я передал всю «старую» работу главной ветке и хочу, чтобы моя новая ветка выросла из «главной».Я не сделал ни одного коммита в своей новой работе.Вот структура филиала:"мастер"->"Старая_функция"

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, и вам будет предложено оставить изменения в текущей ветке (которая будет спрятана) или перенести их с собой в новую ветку.Просто выберите второй вариант, чтобы внести изменения в новую ветку.Затем вы можете совершить коммит как обычно.

GitHub Desktop

Это может быть полезно для всех, кто использует инструменты для GIT.

Команда

Переключить ветку — ваши изменения будут перенесены в новую ветку.Затем вы можете зафиксировать изменения.

 $ git checkout -b <new-branch>

ЧерепахаGIT

Щелкните правой кнопкой мыши свой репозиторий и затем используйте TortoiseGit->Switch/Checkout.

enter image description here enter image description here

Исходное дерево

Для переключения ветки используйте кнопку «Оформить заказ».Кнопку «Оформить заказ» вы увидите вверху после нажатия на ветку.Изменения из текущей ветки будут применены автоматически.Тогда вы сможете их совершить.

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top