Imaginemos que tenemos una master
rama.
Entonces creamos un newbranch
git checkout -b newbranch
y hacer dos nuevos compromisos para newbranch
: commit1 y commit2
Luego cambiamos a maestro y hacemos cherry-pick
git checkout master
git cherry-pick hash_of_commit1
Mirando hacia adentro gitk
, vemos que commit1 y su versión seleccionada tienen diferentes hashes, por lo que técnicamente son dos commits diferentes.
Finalmente nos fusionamos newbranch
en master
:
git merge newbranch
y vea que estos dos commits con diferentes hashes se fusionaron sin problemas, aunque implican que los mismos cambios deberían aplicarse dos veces, por lo que uno de ellos debería fallar.
¿Realmente git hace un análisis inteligente del contenido de commit mientras se fusiona y decide que los cambios no deberían aplicarse dos veces o que estos commits se marcan internamente como vinculados?
fuente
Después de tal fusión, es posible que haya confirmados dos veces en la historia.
Solución para evitar esto, cito del artículo que recomienda que las ramas con confirmaciones duplicadas (seleccionadas con cereza) usen rebase antes de fusionar:
EDITAR Correcciones supuestas por el comentario de David Lemon
fuente
---Y---b2'---b4'