¿Git Cherry-Pick fusiona conflictos en otros compromisos?
-
28-10-2019 - |
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?
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.