Копить, чтобы сделать изменения в другой ветке и вернуться - PullRequest
1 голос
/ 27 июня 2019

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

git stash
git checkout master
git pull
==> fixed code in file file.py
==> made changes in file2.py that I don't want to keep
git add file.py
git commit -m'fixed stuff'
git push
git checkout initial_branch
git stash apply stash@{0}

Который дал мне ошибку:

error: Your local changes to the following files would be overwritten by merge:
        file2.py
Please, commit your changes or stash them before you can merge.
Aborting

Интересно, что я сделал не так, что я должен делать в этом случае в будущем.

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Скорее всего, произошло то, что на следующем шаге вы также изменили один или несколько файлов, кроме file.py:

==> fixed code in file file.py

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

Чтобы исправить вашу текущую ситуацию, вы должны были запустить git status после исправления в ветке master.В идеале вы должны были видеть сообщение, в котором говорилось что-то вроде: «Рабочий каталог чист, ничего не нужно фиксировать».Если вы видели это сообщение, то применение тайника не должно было быть проблемой.

Кстати, если вы хотите просто применить тайник на вершине стека, вы можете упростить до:

git stash apply

Редактировать:

Исходя из обновления вашего вопроса, файл-нарушитель file2.py.Если вы не хотите вносить изменения в этот файл, вам следует сбросить его:

git checkout -- file2.py

После этого git status должно быть чистым, и не должно быть проблем с применением тайника.

1 голос
/ 27 июня 2019

Другим способом продолжения будет фиксация на потом

git commit -am "temp - do not push"

Тогда вы сможете без проблем поменять ветку / объединить.

А когда вы хотите вернуться к своей предыдущей работе, из вашей ветки,

git reset HEAD^

просто отменит коммит, но сохранит ваши изменения в рабочем дереве (фактические файлы).

Основное преимущество: ваша незаконченная работа не "блуждает" в списке тайников (который также может содержать много других не относящихся к делу вещей ), она остается в соответствующей ветке.


Дополнительно, чтобы сделать все это более практичным, создайте псевдонимы

git config --global alias.save 'git commit -am "saved work - do not push"'

git config --global alias.reload 'git reset HEAD^'

Тогда прерывание работы может быть сценарием как

# at this point you're working on branch feature-XYZ

# you need to quickly let this aside and work on hotfix-ABC
git save
git checkout hotfix-ABC

# work on the branch, commit, push, anything

# then the fire is put up, you can get back to your previous dev
git checkout feature-XYZ
git reload
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...