¿Cómo hacer que git merge maneje los cambios no confirmados en mi árbol de trabajo?

StackOverflow https://stackoverflow.com/questions/813822

  •  03-07-2019
  •  | 
  •  

Pregunta

Un compañero de trabajo y yo estamos trabajando en la rama maestra en este momento. Tengo un código en mi árbol de trabajo que no quiero cometer (declaraciones de depuración y similares). Ahora, si él realiza cambios en algunos de esos mismos archivos, no puedo fusionarlos:

$ git merge origin/master
Updating 1b8c5c6..eb44c23
error: Entry 'blah.java' not uptodate. Cannot merge.

Desde un fondo de subversión, estoy acostumbrado a que mi árbol de trabajo se fusione automáticamente cuando extraigo cambios del repositorio y si hay conflictos, los resuelvo manualmente.

La forma más rápida que he encontrado para hacer esto en git es:

$ git stash
$ git merge origin/master
$ git stash pop

Esencialmente, eliminando mis cambios no comprometidos, haciendo la combinación y luego volviendo a aplicar los cambios. ¿Cómo puedo indicar a Merge que fusione automáticamente mi árbol de trabajo con los cambios que intento realizar?

¿Fue útil?

Solución

Por lo que puedo decir, lo mejor que puedes hacer es lo que ya tienes con git stash . A mí también me parece extraño que la fusión quiera tratar solo con árboles limpios.

Otros consejos

Olvida todo lo que aprendiste de Subversion.

Confirmar siempre antes de introducir cambios externos.

Imagina que tienes un árbol en su mayoría de trabajo, tal vez no sea perfecto, pero estás progresando. Luego, va a hacer una fusión y el código que está trayendo solo causó estragos (fue un buggy en sí mismo, demasiados conflictos con los que lidiar, etc.). ¿No sería bueno si pudieras deshacer eso?

Si te comprometes, puedes. Si no lo haces, solo vas a sufrir.

Recuerde: lo que usted comete no tiene para ser lo que usted empuja, pero lo que no comete se puede perder fácilmente.

Simplemente haga lo seguro y fácil, comprométase temprano y comprométase con frecuencia.

  • Si el trabajo local no está comprometido
    • Y ha introducido archivos completamente nuevos que no existen en la rama remota:
    • O los archivos afectados por su trabajo local tienen CERO superpuesto con los archivos afectados por los cambios que necesita extraer del control remoto:
      • Tienes suerte: git pull funcionará " simplemente funcionará "
    • De lo contrario:
      • Si sus cambios locales NO se superponen con los cambios que está realizando:
        • el git stash funcionará:
          • git stash save
          • git pull
          • git stash pop
      • Si sus cambios locales se superponen ALGUNOS con los cambios que está realizando:
        • git stash requerirá resolución de conflictos manual:
          • git stash save
          • git pull
          • git stash pop
          • resolver conflictos de combinación
          • git reset
          • git stash drop
  • Si el trabajo local está comprometido
    • Y los archivos afectados por su trabajo local se superponen con CERO a los archivos afectados por
      • Tienes suerte: git pull funcionará " simplemente funcionará "
      • Sin embargo, git pull --rebase funcionará aún mejor " debido a una historia más limpia
      • no hay ningún compromiso de fusión; sus cambios se confirmarán después de los cambios en sentido ascendente
    • De lo contrario:
      • git pull requerirá resolución de conflictos manual:
        • git pull
        • resolver conflictos de combinación
        • git add FILE para cada ARCHIVO en conflicto
        • git commit
      • git pull --rebase aún podría " trabajar aún mejor " debido a una historia más limpia
        • sin embargo, resolver conflictos de combinación podría ser mucho más difícil

Para obtener una explicación detallada, consulte: https://happygitwithr.com/pull-tricky.html

No puede decirle a git merge que combine cambios en archivos que tengan cambios con respecto a su repositorio local. Esto lo protege de perder sus cambios en aquellos momentos en que la fusión va mal.

Con el enfoque de fusión de CVS y SVN, si no copió sus archivos manualmente antes de la actualización y los mezcló en la combinación, debe volver a editarlos manualmente para volver a un buen estado.

Si confirma los cambios o los guarda antes de realizar una fusión, todo es reversible. Si la combinación no va bien, puedes probar varias formas de hacerla funcionar y elegir la que mejor funcione.

Si realiza cambios experimentales o de depuración, puede usar git rebase para moverlos después de los confirmaciones que obtiene a través de git merge para facilitar la eliminación de ellos o para evitar empujarlos a un repositorio accidentalmente.

Tenga en cuenta que el uso de git rebase en una sucursal que haya enviado a un repositorio compartido causará dolor a todos los que se retiran de ese repositorio.

Prefiero usar git stash en estos casos, pero solo lo uso si la combinación cambia los archivos que he editado y no confirmado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top