2011-04-01 13 views
77

He leído varias cosas sobre la función nueva de git, y estoy considerando habilitarlo. Pero no he visto a nadie mencionar posibles problemas que puedan surgir al usarlo. Tengo que asumir que hay una desventaja, o que probablemente esté habilitada por defecto. Entonces, ¿hay alguna desventaja para habilitar el rerere? ¿Qué problemas potenciales puede causar que de otro modo no ocurrirían?¿Hay algún inconveniente para habilitar git rerere?

+0

Cuando [la actualización automática está habilitada] (http://chuva-inc.com/blog/2012/09/fast-tip-enable-git-rerere-right-now) y aplica una resolución previa, ¿lo hace? mostrar un mensaje? Si es asi, ¿como se ve? TIA! – joeytwiddle

Respuesta

49

Si realiza una combinación incorrecta, luego deséchela, luego realice la "misma" combinación nuevamente, será incorrecta nuevamente. Sin embargo, puedes olvidar una resolución grabada. De the documentation:

git rerere forget <pathspec>

Esto restablece las resoluciones de conflicto que rerere ha grabado para el conflicto actual en <pathspec>.

Tenga cuidado de usarlo en rutas específicas; no desea deshacerse de todas sus resoluciones grabadas en todas partes. (forget sin argumentos ha sido deprecated para salvarte de hacer esto, a menos que escriba git rerere forget . para solicitar explícitamente.)

Pero si usted no cree que para hacer eso, aquí se puede llegar a ponerse de combinación incorrecta de que en su historia ...

+12

Esta es la razón por la que 'rerere' aún deja los archivos con conflictos marcados como no fusionados, por lo que debe agregarlos manualmente (con suerte después de inspeccionarlos/probarlos) antes de confirmarlos. Siempre puedes usar 'git checkout -m ' para verificar la versión conflictiva original y volver a hacer la resolución si es necesario. – Cascabel

+4

Sigo pensando que el comando debería ser 'git forere'. – MatrixFrog

+1

¡Eso tendría sentido! Parece que necesitas un nuevo alias. – Cascabel

31

Como J. C. Hamano menciona en su artículo "Fun with rerere"

  • rerere recuerda cómo se eligió para resolver las regiones en conflicto;
  • Rerere también recuerda cómo retocó fuera de las regiones en conflicto para ajustarse a los cambios semánticos;
  • Rerere puede reutilizar la resolución anterior aunque haya estado fusionando dos ramas con contenidos diferentes a la que resolvió anteriormente.

Incluso las personas que han estado utilizando rerere durante mucho tiempo a menudo no se dan cuenta del último punto.

Si activa rerere en un contenido demasiado amplio, puede terminar con una resolución de fusión sorprendente o confusa debido al último punto.

+10

Los tíos en conflicto todavía tienen que coincidir; es bastante difícil dar un falso positivo. – Cascabel

1

Tengo acceso global habilitado. Realmente no he notado ningún problema, y ​​por lo general parece que me hace la vida más fácil.

+3

Lo mismo aquí. No hay problemas en más de 2 años de uso. –

1

I cherry eligió una confirmación (en gitk) que solo contenía un archivo binario. Cherrypick falló debido a un conflicto (lo que de por sí es natural) y resolví el conflicto manteniendo la elección perfecta. Más tarde me sorprendí al encontrar en otra rama rebasada que mis dlls no se comportaban, solo para descubrir que no eran llevados a la base de datos como (especulo) resolución automática de conflictos. Así que este es el único caso que encontré (tener habilitado nuevamente) de ejecutar en contra intuitivo (aunque estoy seguro de que es perfectamente consistente) el comportamiento.

+0

Cure: 'git rerere forget path/to/compiled/bin.dll' –

+0

En el caso original, tuve el conflicto no en la selección de cereza sino en el rebase pero no creo que haga la diferencia –

Cuestiones relacionadas