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

Скажем, у меня есть git-репо, рабочее дерево и / или индекс которого «грязный» (т. Е. У меня есть локальные модификации, которые еще не были зафиксированы или сохранены), и у меня возникает соблазн сделать «git pull» без предварительной фиксации или сохранения. (Или, скажем, я представляю нового члена команды для git иOни соблазн запустить "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 имеет заметную кнопку «тянуть», которая не проверяет наличие грязи перед тем, как вывести «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» ответ вообще? Перебазирование может иметь своесвоя подводные камни в некоторых случаях, но до сих пор я предполагаю, что наличие грязного рабочего дерева / индекса не сделает перебазирование более проблематичным, чем могло бы быть в противном случае.

Ответы на вопрос(6)

Ваш ответ на вопрос