Actualmente estoy buscando muchas de las funciones de seguimiento de contenido de git. Es muy bueno saber que git me permite descifrar el código que se ha movido de un archivo a otro, pero me pregunto cómo se puede usar esta función cuando se realiza la resolución de conflictos en las fusiones.Cómo obtener git para fusionar correctamente el contenido movido (no solo archivos)
Aquí está el panorama:
Tengo dos archivos hello.cc
y bye.cc
creado. Comienzo una rama topic
y muevo un código de hello.cc
a bye.cc
. Si ahora hago un git blame -C bye.cc
puedo ver que este código vino originalmente de hello.cc
, que es bueno saber. Sin embargo ahora cambio a la rama original sin el contenido movido y cambio algún código dentro de la sección en hello.cc
que se ha movido en la otra confirmación. Si ahora hago un git merge topic
obtengo un conflicto por hello.cc
. Sin embargo, a menos que use un estilo diff3 (lo cual usualmente hago), solo puedo ver que este método ha sido eliminado de hello.cc
en la otra rama, pero no que haya sido modificado posteriormente. Lo que sería bueno sería también obtener un conflicto en bye.cc
porque sería necesario verificar si los cambios de la otra rama tendrán que volver a aplicarse al código. ¿Es esto de alguna manera posible?
Sé que puedo averiguar manualmente, que el código se ha movido haciendo un git blame --reverse -C topic...
. Sin embargo, para uno me tomó bastante tiempo descubrir esta posibilidad y la mayoría probablemente no lo sepa. Por segunda vez soy flojo y probablemente olvide que el código podría haberse movido. Además, no estoy seguro de que esto funcione cuando el código se haya movido a más de un archivo.
¿Cuál sería su forma de mantener esta situación lo más segura posible?
Editar:
Me acabo de enterar que git blame --reverse -C hello.cc $(git merge-base HEAD topic)..topic
también trabaja para localizar el origen del contenido se movió. Y si entiendo correctamente git, probablemente sea más rápido, porque no hará una búsqueda completa del contenido en el repositorio completo.
Editar:
he subido al repositorio estoy usando para jugar a github para que pueda probar la fusión por sí mismo. El compromiso donde moví la función está en la rama de tema. El compromiso donde se cambia la misma función en el maestro en HEAD de la rama merge_here
. Hay un commit adicional en master en el que estaba jugando con algunas otras técnicas de fusión, que debes ignorar para esta pregunta.
Sí Seguro . Lo sé. Pero, ¿cuál es la mejor manera de hacer que GIT me dé pistas y advertencias sobre qué incluir en el compromiso, ya sea a través del uso de herramientas o mediante conflictos de fusión? – LiKao