Есть множество разных способов, в зависимости от того, как далеко вы находитесь и на какой ветке (ах) вы хотите их получить.
Давайте возьмем классическую ошибку:
$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop
Итак, теперь вы хотите, чтобы эти изменения, которые вы еще не совершили master
, были внесены develop
.
Если вы неdevelop
тем не менее, метод тривиален:
$ git checkout -b develop
Это создает новую develop
ветку, начиная с того места, где вы сейчас находитесь. Теперь вы можете делать коммиты, и все новое включено develop
.
Вы естьdevelop
. Посмотрим, позволит ли Git переключаться, ничего не делая:
$ git checkout develop
Это либо удастся, либо пожаловаться. Если это удастся, отлично! Просто зафиксируй. Если нет ( error: Your local changes to the following files would be overwritten ...
), у вас еще есть много вариантов.
Вероятно, проще всего git stash
(как postговорили все остальные ответчики, которые избивали меня до щелчка ). Запустите git stash save
или git stash push
, 1 или просто обычный, git stash
что сокращенно от save
/ push
:
$ git stash
Это фиксирует ваш код (да, он действительно делает некоторые коммиты), используя странный не-ответвительный метод. Коммиты, которые он делает, не «включены» ни в какую ветку, но теперь безопасно хранятся в репозитории, так что теперь вы можете переключать ветки, а затем «применять» тайник:
$ git checkout develop
Switched to branch 'develop'
$ git stash apply
Если все идет хорошо, и вам нравятся результаты, вы должны тогда git stash drop
заначить. Это удаляет ссылку на странные не-ветвящиеся коммиты. (Они все еще находятся в хранилище и иногда могут быть получены в чрезвычайной ситуации, но для большинства целей вы должны считать, что они исчезли в этот момент.)
apply
Шаг делает слияние с спрятанных изменений, используя мощную базовую технику слияния Git, то же рода вещи он использует , когда вы делаете ветви слияния. Это означает, что вы можете получить «конфликты слияния», если ветвь, над которой вы работали по ошибке, достаточно отличается от ветки, над которой вы работали. Поэтому рекомендуется тщательно проверить результаты, прежде чем предполагать, что тайник применен корректно, даже если сам Git не обнаружил каких-либо конфликтов слияния.
Многие люди используют git stash pop
, что является сокращением git stash apply && git stash drop
. Это хорошо, насколько это возможно, но это означает, что если приложение приводит к путанице, и вы решаете, что не хотите идти по этому пути, вы не сможете легко вернуть тайник. Вот почему я рекомендую отдельно apply
, проверять результаты, drop
только если / когда выполнено. (Это, конечно, вводит еще один момент, когда вы можете сделать еще один перерыв на кофе и забыть о том, что вы делали, вернуться и сделать что-то не то, так что это не идеальное лекарство.)
1save
в git stash save
старом глагол для создания нового притона. В Git версии 2.13 появился новый глагол, чтобы сделать вещи более согласованными pop
и добавить больше опций в команду создания. Git версии 2.16 формально не поддерживает старый глагол (хотя он все еще работает в Git 2.23, которая является последней версией на момент редактирования).
git stash
git-scm.com/book/en/Git-Tools-Stashing