Переместить существующую, незафиксированную работу в новую ветку в Git
я приступил к работе над новой функцией и после кодирования немного, я решил, что эта функция должна быть на своей ветке.
Как переместить существующие незафиксированные изменения в новую ветку и сбросить текущую?
Я хочу сбросить свою текущую ветку, сохраняя существующую работу над новой функцией.
5 ответов:
использовать следующий:
git checkout -b <new-branch>это оставит вашу текущую ветку как создать и оформить новую ветку и сохранить все ваши изменения. Затем вы можете сделать коммит с:
git add <files>и зафиксируйте свою новую ветку с помощью:
git commit -m "<Brief description of this commit>"изменения в рабочем каталоге и изменения, размещенные в индексе, пока не относятся ни к одной ветви. Это изменяется там, где эти изменения закончатся.
не сброс ваш оригинальный бранч, все остается как есть. Последний коммит на
<old-branch>все равно будет то же самое. Поэтому тыcheckout -bа затем совершить.
кроме того:
сохранить текущие изменения в тайнике temp:
$ git stashсоздайте новую ветвь на основе этого тайника и переключитесь на новую ветвь:
$ git stash branch <new-branch> stash@{0}совет: используйте клавишу tab, чтобы уменьшить ввод имени тайника.
если вы делали совершает на вашей основной ветке во время кодирования, но теперь вы хотите переместить эти коммиты в другую ветку:
скопируйте текущую историю в новую ветку, принося с собой любые незафиксированные изменения:
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тогда эта конфигурация будет потеряна.альтернативой является использование этот метод сброса. Но эти инструкции будут отбрасывать любые незафиксированные изменения, которые у вас есть. Если вы хотите сохранить те, спрячьте их сначала и снимите их в конце.
Если вы зафиксируете его,вы также можете выбрать один идентификатор фиксации. Я часто делаю это, когда начинаю работать в master, а затем хочу создать локальную ветку, прежде чем я перейду к своему источнику/.
git cherry-pick <commitID>есть много, что вы можете сделать с cherry-pick, как описано здесь, но это может быть случай для вас.
общий сценарий заключается в следующем: я забыл создать новую ветку для новой функции, и делает всю работу в старую ветку. Я поручил всю" старую "работу главной ветви, и я хочу, чтобы моя новая ветвь выросла из"Мастера". Я не сделал ни одного заявления о своей новой работе. Вот отраслевая структура: "мастер"->"Old_feature"
git stash git checkout master git checkout -b "New_branch" git stash apply
Comments