tag commits git merge-conflict-resolution git-rerere

tag - git sign commits



¿Debo realizar una combinación para hacer que git-rerere grabe mi resolución de conflictos? (2)

¿Basta con poner en escena los archivos en conflicto?

Debe asegurarse de resolver el conflicto sin dejar marcadores de conflicto.

Consulte commit f427869 , commit bc4caec (28 de agosto de 2018) de Thomas Gummerer ( tgummerer ) .
Sugerido por: Junio ​​C Hamano ( gitster ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit d88949d , 17 de septiembre de 2018)

Ver commit b9b07ef (28 de agosto de 2018) de Thomas Gummerer ( tgummerer ) .
Ayudado por: Junio ​​C Hamano ( gitster ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit 4dd0c4a , 17 de septiembre de 2018)

.gitattributes : agrega un tamaño de marcador de conflicto para los archivos relevantes

Algunos archivos en git.git contienen líneas que parecen marcadores de conflicto, ya sea en ejemplos o pruebas, o en el caso de Documentation/gitk.txt debido al encabezado asciidoc.

Tener marcadores de conflicto de la misma longitud que el contenido real puede ser confuso para los humanos, y es imposible de manejar para herramientas como '' git rerere '' .

Para evitarlo, establezca el atributo '' conflict-marker-size '' para esos archivos en 32, lo que hace que los marcadores de conflicto no sean ambiguos.

Estoy usando git-rerere para el propósito previsto, para registrar las resoluciones de conflicto entre dos ramas (una rama maestra y otra temática) a medida que esas ramas se desarrollan, sin crear confirmaciones de fusión innecesarias. Sin embargo, incluso después de leer la página de manual de git-rerere no tengo mucha certeza cuando rerere realmente graba mi resolución de conflictos. Mi flujo de trabajo estándar para detectar y resolver nuevos conflictos de combinación es hacer git merge master desde la rama del tema, resolver los conflictos, luego organizar todos los archivos y realizar la fusión con git commit -m "Finished test merge" , y luego deshacer la fusión usando git reset --hard HEAD^ , dejando atrás solo las resoluciones grabadas almacenadas por git-rerere .

Sin embargo, esto parece un poco tonto. ¿Creando un commit y luego deshaciéndolo solo para grabar la resolución? Después de leer la página del manual de git-rerere , todavía no tengo muy claro cuándo registra mis resoluciones. ¿Es suficiente simplemente poner en escena los archivos en conflicto o realmente necesito crear el compromiso de fusión después de resolver los conflictos, como he estado haciendo?


De la página del manual:

Running the git rerere command immediately after a conflicted automerge records the conflicted working tree files, with the usual conflict markers <<<<<<<, =======, and >>>>>>> in them. Later, after you are done resolving the conflicts, running git rerere again will record the resolved state of these files.

Y:

As a convenience measure, git merge automatically invokes git rerere upon exiting with a failed automerge and git rerere records the hand resolve when it is a new conflict, or reuses the earlier hand resolve when it is not. git commit also invokes git rerere when committing a merge result. What this means is that you do not have to do anything special yourself (besides enabling the rerere.enabled config variable).

Así que no tienes que comprometer y deshacer el compromiso. Simplemente puede ejecutar git rerere sin parámetros para registrar el commit.