Pregunta

Por alguna razón, parece que Git Cherry-Pick atrae a otros compromisos cuando las moscas tienen conflictos de fusiones. Estos desaparecen cuando usamos git mergetool pero impedimos que editemos manualmente el archivo confligido de fusión.

¿Alguien sabe por qué pasa esto?

Para mostrar lo que quiero decir, tomemos un nuevo repositorio de Git 1.7.4 con un solo archivo foo:

header

footer

Creemos una nueva rama en este momento llamada bar. De vuelta en el maestro, agregemos tres cambios a este archivo en compromisos separados.

Commit 1:

header

+add something
+
footer

Commit 2:

header

add something

+add something else
+
footer

Commit 3:

header

add something

add something else

+important change!
+
footer

Dado que este último compromiso es importante, después del hecho de que decidimos que queremos retirar esto a la rama bar y git cherry-pick <commit> en esa rama.

Desafortunadamente, esto produce un conflicto de fusión interesante en el archivo foo:

header

<<<<<<< HEAD
=======
add something here

add something else here

important change!

>>>>>>> 356ca3c... important change
footer

Tenga en cuenta que git mergetool parece hacer lo correcto y produce esto:

header

+important change!
+
footer

¿Por qué el archivo confonfligido de fusión contiene compromisos? Antes de la que intentamos elegir cereza?

¿Fue útil?

Solución

Git es escéptico y no hará una fusión si no encuentra los bordes adecuados a lo que el parche se aplicaría. El parche se aplicaría a un número de línea que no existe. Inspeccione el parche de compromiso y vea que se aplica en un número de línea que no tiene sentido. Dado que es un sello de cereza, no tiene en cuenta cómo el archivo llegó a ser así y que estaría bien agregar esa entrada. Espero que tenga sentido.

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