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



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



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



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

949   5  

5 ответов:

использовать следующий:

git checkout -b <new-branch>

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

git add <files>

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

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

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

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

кроме того:

  1. сохранить текущие изменения в тайнике temp:

    $ git stash

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

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

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

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

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

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

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

git cherry-pick <commitID>

есть много, что вы можете сделать с cherry-pick, как описано здесь, но это может быть случай для вас.

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

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply

Comments

    Ничего не найдено.