некоторое обходное решение для python 2.6, когда это поведение нежелательно
# python
Python 2.6.6 (r266:84292, Aug 9 2016, 06:11:56)
Type "help", "copyright", "credits" or "license" for more information.
>>> x=0
>>> a=list(x for x in xrange(9))
>>> x
0
>>> a=[x for x in xrange(9)]
>>> x
8
Другие ответы, предлагающие проверить другую ветку, а затем зафиксировать ее, работают только в том случае, если проверка возможна с учетом локальных изменений. Если нет, то вы наиболее часто используете git stash
:
git stash
git checkout other-branch
git stash pop
Первый stash
скрывает ваши изменения (в основном это временная фиксация), а последующие stash pop
повторно применяет их. Это позволяет git использовать свои возможности слияния.
Если при попытке открыть тайник вы столкнетесь с конфликтами слияния ... следующие шаги зависят от того, что это за конфликты. Если все сохраненные изменения действительно принадлежат этой другой ветке, вам просто придется их отсортировать - это следствие того, что вы внесли изменения не в ту ветку.
С другой стороны, если вы действительно напортачили, и в вашем рабочем дереве есть сочетание изменений для двух ветвей, а конфликты возникают только в тех, которые вы хотите зафиксировать обратно в исходной ветке, вы можете сэкономьте немного работы. Как обычно, есть много способов сделать это.Вот один из них, начиная с того момента, как вы открываете и видите конфликты:
# Unstage everything (warning: this leaves files with conflicts in your tree)
git reset
# Add the things you *do* want to commit here
git add -p # or maybe git add -i
git commit
# The stash still exists; pop only throws it away if it applied cleanly
git checkout original-branch
git stash pop
# Add the changes meant for this branch
git add -p
git commit
# And throw away the rest
git reset --hard
В качестве альтернативы, если вы заранее понимаете, что это произойдет, просто зафиксируйте то, что принадлежит текущей ветке. Вы всегда можете вернуться и исправить эту фиксацию:
git add -p
git commit
git stash
git checkout other-branch
git stash pop
И, конечно, помните, что все это потребовало некоторой работы, и избегайте этого в следующий раз, возможно, указав имя вашей текущей ветки в командной строке, добавив $ ( __git_ps1)
на вашу PS1 в вашем bashrc. (См., Например, Git in Bash docs.)
Вы можете просто создать новую ветку и переключиться на нее. Затем зафиксируйте свои изменения:
git branch dirty
git checkout dirty
// And your commit follows ...
В качестве альтернативы вы также можете проверить существующую ветку (просто git checkout
). Но только, если нет коллизий (база всех редактируемых файлов такая же, как в вашей текущей ветке). В противном случае вы получите сообщение.
git checkout my_other_branch
git add my_file my_other_file
git commit -m
И предоставьте сообщение о фиксации.