¿Hay alguna desventaja de habilitar git rerere?

107

He leído varias cosas sobre la función rerere de git y estoy considerando habilitarla. Pero no he visto a nadie mencionar los posibles problemas que podrían surgir al usarlo. Debo asumir que hay una desventaja, o probablemente estaría habilitado de forma predeterminada. Entonces, ¿hay alguna desventaja en habilitar la rerere? ¿Qué problemas potenciales puede causar que no ocurrirían de otra manera?

Ryan C. Thompson
fuente
Cuando se habilita la repetición automática y aplica una resolución anterior, ¿muestra un mensaje? Si es asi, ¿como se ve? TIA!
joeytwiddle
1
@joeytwiddle, según este artículo , sería de la forma,Resolved 'index.html' using previous resolution.
sampablokuper

Respuestas:

69

Si realiza una combinación de forma incorrecta, deséchela y vuelva a realizar la combinación "misma", volverá a ser incorrecta. Sin embargo, puede olvidar una resolución grabada. De la documentación :

git rerere forget <pathspec>

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

Tenga cuidado de usarlo en rutas específicas; no querrás arruinar todas tus resoluciones grabadas en todas partes. ( forgetsin argumentos se ha desaprobado para evitar que haga esto, a menos que escriba git rerere forget .para solicitarlo explícitamente).

Pero si no piensa en hacer eso, podría terminar fácilmente poniendo esa combinación incorrecta en su historial ...

MatrixFrog
fuente
13
Esta es la razón por la que rerereaú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 confirmar. Siempre puede usar git checkout -m <path>para verificar la versión original en conflicto y rehacer la resolución si es necesario.
Cascabel
1
¡Eso tendría sentido! Parece que necesitas un nuevo alias.
Cascabel
5
Creo que este es probablemente el problema principal. Habilitar rerere agrega una forma más de que los errores se cuelen inesperadamente. Una combinación que aborta (o más bien deshace eliminándola del historial) aún podría volver a atormentarlo más tarde. Básicamente, introduce un segundo mecanismo histórico que es ortogonal al gráfico histórico real.
Ryan C. Thompson
3
@RyanThompson Las fusiones canceladas no afectan a rerere. (A menudo desearía que lo hicieran; a veces he abortado una combinación porque la configuré mal, luego tuve que hacer exactamente las mismas resoluciones cuando la configuré correctamente). En cuanto a eliminar una combinación del historial, ¿por qué alguna vez ¿Haz eso?
Marnen Laibow-Koser
40

Como menciona JC Hamano en su artículo " Diversión con rerere "

  • Rerere recuerda cómo eligió resolver las regiones en conflicto;
  • Rerere también recuerda cómo retocó fuera de las regiones en conflicto para adaptarse a los cambios semánticos;
  • Rerere puede reutilizar la resolución anterior a pesar de que estaba fusionando dos ramas con contenido diferente al que resolvió anteriormente .

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

Por lo tanto, si activa rerereun contenido demasiado amplio, puede terminar con una resolución de fusión sorprendente o confusa debido al último punto.

VonC
fuente
15
Los macizos en conflicto todavía tienen que coincidir; es bastante difícil que dé un falso positivo.
Cascabel
3

Tengo rerere habilitado globalmente. Realmente no he notado ningún problema y, por lo general, parece facilitarme la vida.

Marnen Laibow-Koser
fuente
4
Igual que aquí. Sin problemas en más de 2 años de uso.
Andrey Tarantsov
3

Elegí una confirmación (en gitk) que solo contenía un archivo binario. Cherrypick falló debido a un conflicto (lo que es natural) y resolví el conflicto manteniendo la selección. Más tarde, me sorprendió encontrar en otra rama rebasada que mis dlls no se comportaban, solo para descubrir que no se llevaron a la rebase como (especulo) resolución automática de conflictos. Así que este es el único caso que encontré (habiendo vuelto a habilitar) de encontrar un comportamiento contradictorio (aunque estoy seguro de que es perfectamente consistente).

Mr_and_Mrs_D
fuente
1
Cura:git rerere forget path/to/compiled/bin.dll
Mr_and_Mrs_D
En el caso original, el conflicto no se
debió a la selección selectiva,