Digamos que tengo la función X en el archivo A, y quería mover esa función al archivo B. Mientras tanto, alguien más realizó cambios en la función X en el archivo A.¿Cómo maneja git el código de fusión que se movió a un archivo diferente?
¿Hay algo especial cuando fusiona esos dos? cambios? ¿Reconocería que la misma función se movió al archivo B y aplicará los cambios allí? ¿O podríamos terminar perdiendo los cambios o tener dos copias de la misma función en el archivo A y B?
La mayoría de los artículos que encontré sobre cómo mover código en git se refieren principalmente al cambio de nombre de archivos completos y no bloques de código dentro de archivos. Lo más cerca que he encontrado es un blurb from Linus at kerneltrap:
Y cuando se utiliza git, el conjunto 'movimiento mantienen código separado de cambios' tiene una razón aún más fundamental: git puede seguir el movimiento de código (de nuevo, si se mueve un archivo completo o solo una función entre archivos), y al hacer un 'git culpa' -C en realidad seguirá el movimiento del código entre los archivos. Lo hace que para el análisis de similitud, pero significa que si ambos se mueven el código y cambio que, al mismo tiempo, git no puede ver que 'oh, esa función vino originalmente de ese otro archivo', y ahora obtienes peores anotaciones sobre dónde se originó realmente el código.
Parece que git reconocerá que el código se movió a otra parte, pero realmente no dice lo que sucede durante una fusión.
por lo que si estoy de combinar los cambios a X en A en mi rama donde moví X a B, básicamente perdería esos cambios porque Git cree que borré esas líneas? Supongo que solo necesito mirar cuidadosamente los diffs entonces ... – jtjin
No los perderás: tendrás que fusionar el conflicto a mano. –