¿Es este comportamiento solo git?
Después de discutir con un colega, acabo de intentarlo y SVN lo maneja sin problemas: se modifican las 2 líneas.
Las capacidades de fusión de varios VCS se prueban aquí para bazar, darcs, git y mercurial : https://github.com/mndrix/merge-this
Parece que solo los darcs fusionan con éxito el caso de "líneas adyacentes".
Aplicar cambios adyacentes a los archivos no es un problema difícil. Realmente creo que este comportamiento ha sido elegido a propósito.
¿Por qué alguien decidiría que modificar líneas adyacentes produce un conflicto?
Creo que esto es para obligarlo a mirarlo .
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif número 1, en master:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif número 2, fusionado de una rama:
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
Después de la fusión, no quieres eso:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
Ver este comportamiento como una característica
Puede convertir el comportamiento de fusión de git en una ventaja. Cuando necesite mantener 2 líneas consistentes pero no pueda detectarlo (en el momento de la compilación, al comienzo de sus pruebas o de lo contrario), puede intentar unirlas.
Reescribe esto ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
...a esto:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
do_something_else(r); // Need to do something else
Entonces, cuando fusionas Modif 1 ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i)/2; // we need only the half
do_something_else(r); // Need to do something else
... con Modif 2 ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
if(r < 0) // do_stuff can return an error
handle_error(r);
do_something_else(r/2); // Need to do something else
..., git producirá un conflicto y te obligará a mirarlo.