Безопасно ли «git pull», когда мое рабочее дерево и/или индекс грязные?

Скажем, у меня есть репозиторий git, чье рабочее дерево и/или индекс "грязные" (т.е. у меня есть локальные модификации, которые еще не были зафиксированы или спрятаны), и я испытываю искушение сделать "git pull" без первая фиксация или скрытие. (В качестве альтернативы, скажем, я знакомлю нового члена команды с git, и у нихвозникает соблазн запустить «git pull», когда ихлокальное репо «грязное».) Мне интересно насколько безопасно делать «git pull» в этом случае. Если это небезопасно, что самое худшее может случиться? Имеет ли значение, беру ли я данные из надежного или ненадежного источника?

Мое исследование до сих пор предлагает запутанный ряд идей относительно того, что я предполагал, будет довольно простым вопросом.

Начнем с того, что справочная страница git-stash говорит о том, что git pull довольно безопасна и прервется, если вы окажетесь в ситуации, когда что-то может пойти не так:

   Pulling into a dirty tree
       When you are in the middle of something, you learn that there are
       upstream changes that are possibly relevant to what you are doing.
       When your local changes do not conflict with the changes in the
       upstream, a simple git pull will let you move forward.

       However, there are cases in which your local changes do conflict
       with the upstream changes, and git pull refuses to overwrite your
       changes. In such a case, you can stash your changes away, perform a
       pull, and then unstash, like this...

Похоже, это тоже происходит, в моих простых тестах до сих пор.

Также, возможно, подразумевая, что «git pull» довольно безопасен, панель инструментов Git Extensionsдля Visual Studio имеет заметную кнопку «pull», которая не выполняет проверку на наличие загрязнений, прежде чем перейти к «git pull». (Если бы я разрабатывал панель инструментов Visual Studio, я бы постарался не делать так, чтобы было особенно легко выстрелить себе в ногу.)

Справочная страница git-pull не делает мое «git pull» опасным, хотя и предполагает это не лучшая практика:

   If any of the remote changes overlap with local uncommitted changes,
   the merge will be automatically cancelled and the work tree untouched.
   It is generally best to get any local changes in working order before
   pulling or stash them away with git-stash(1).

Но тогда вы также можете найти совет, что тянуть в грязь очень плохо, например :

Avoid git-pull!
git-pull should never get invoked if you have dirty files lying around or if your branch is ahead of master.
This will always lead to some dirty artifacts in the commit history

Есть ли простой ответ на вопрос, какая перспектива лучше, или это как-то индивидуально?

Последующие действия: Изменит ли ответ использование «git pull --rebase», а не просто «git pull»? Перебазирование может иметь свои собственныеподводные камнив некоторых случаях, но пока я предполагаю, что наличие грязного рабочего дерева/индекса не сделает перебазирование более проблематичным, чем это было бы в противном случае.

9
задан Community 23 May 2017 в 12:16
поделиться