Digamos que tengo un git repo cuyo árbol de trabajo y/o índice es "sucio" (es decir, tengo modificaciones locales que aún no se han confirmado o guardado) y estoy tentado de hacer un "git pull" sin primero comprometerme o escondiendo (Alternativamente, digamos que estoy presentando un nuevo miembro del equipo a git y que están tentados a ejecutar "git pull" cuando su repositorio local está "sucio"). Me pregunto qué tan seguro es hacer un " git pull "en este caso. Si no es seguro, ¿qué es lo peor que puede pasar? ¿Importa si estoy sacando de una fuente confiable o no confiable?¿Es seguro "git pull" cuando mi árbol de trabajo y/o índice está sucio?
Mi investigación hasta el momento sugiere una gama confusa de ideas sobre lo que suponía que sería una pregunta bastante directa.
Para empezar, la página de manual git-alijo hace que suene como git pull es bastante seguro, y se abortará si estás en una situación en la que algo puede ir mal:
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...
Esto parece realmente a sea lo que pase también, en mis simples pruebas hasta ahora.
también quizá lo que implica que "git pull" es bastante seguro, la barra de herramientas Git Extensions para Visual Studio tiene un botón de despliegue prominente que no hace un cheque por la suciedad antes de desembolsar a "git pull". (Si estuviera diseñando una barra de herramientas de Visual Studio, trataría de evitar que sea particularmente fácil dispararse en el pie.)
La página de git-pull no hace que mi sonido de "git pull" sea peligroso, aunque sugiere que no es una buena práctica:
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).
Pero entonces también se puede encontrar consejos que tirando en una sucia es muy mala, e.g.:
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
¿hay una respuesta fácil a qué perspectiva es mejor, o es esto de alguna manera una cosa caso por caso?
Seguimiento: ¿Usaría "git pull --rebase" en lugar de simplemente "git pull" para cambiar la respuesta? Rebasing puede tener su ownpitfalls en algunos casos, pero hasta ahora supongo que tener un tree tree/index sucio no volvería una rebase más problemática de lo que sería.
Esa declaración del wiki es extraña: las modificaciones locales ** nunca ** darán lugar a "artefactos" en el historial de confirmaciones. – Cascabel
@Jefromi: de hecho. Es por eso que pongo el énfasis en la última parte (que automáticamente crea commits si es necesario). –
No puedo ver ese comentario en la Wiki de DeltaSpike. –