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