2016-06-30 4 views
0

Попытка понять поведение git.Почему git pull не может/не может объединить локальные изменения?

Когда я исполняю git pull я получаю предупреждение

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

Но если я git stash save, git stash pull, а затем git stash pop, изменения применяются без каких-либо проблем.

Auto-merging foo/bar 
... 

Почему не может/не git pull делать то же самое?

+1

'git pull' =' git fetch' + 'git merge' ... pulling делает слияние, поэтому сообщение об ошибке. –

+0

Обратите внимание, что если вы хотите более разумный 'git pull', который делает для вас stash/pull/pop, рассмотрите [git-smart] (https://github.com/geelen/git-smart), и это' git smart- pull' команда. – meagar

+0

рабочий стол git stash save/pop работает над незафиксированным кодом. Как git знает, что вы хотите сделать с вашим незафиксированным кодом? Я бы предпочел, чтобы он предложил вам сказать то, что вы хотите, а не просто сдуть его с помощью слияния или автоматически сшить его. Вы должны обрабатывать незафиксированный код вручную, прежде чем пытаться объединить свои материалы с изменениями вверх (цель pull ...) – g19fanatic

ответ

2

В общем случае нет гарантии, что слияние может быть выполнено автоматически. Он может оставлять конфликты, требующие ручного разрешения. В этом случае пользователю было бы очень неприятно, если бы они забыли о местных изменениях, над которыми они работали, и просто хотели «отменить» слияние, чтобы вернуться туда, где они были. Если вы перенесите или запишете сначала, у вас есть возможность прервать/отменить слияние, потому что если вы его совершили, у вас все равно будет фиксация, и если приставка не будет автоматически сгенерирована без конфликтов, тогда тарелка не будет удален.

Смежные вопросы