git auto-merge no funciona como se esperaba

Tengo un file (digamos abc ) en dos twigs: master y sample .

La date de confirmación para abc on sample es anterior a abc en el maestro actual; en otras palabras, abc es lo último en master .

Ahora, corrí:

git checkout sample git merge master 

Se combinó automáticamente varios files (incluido abc ).

Problema: la línea # 42 en abc parece persistir desde la muestra de la twig en lugar de ser reemplazada desde el maestro .

Por qué está pasando esto ? Esperaba lo contrario. Por favor ayuda.

El hecho de que abc sea ​​más reciente en el maestro que en la muestra no significa que se reemplaza totalmente por la versión maestra durante la fusión. Si la versión de muestra de abc tiene algunos cambios que no están presentes en el maestro , incluso si son más antiguos que el último cambio en el maestro , git intentará conservarlos durante la fusión.

Es importante tener en count que, al fusionarse, Git no funciona en el nivel de file; más bien, opera en el nivel de línea . Si se cambió una línea en la sample pero no en el master (o en el master pero no en la sample ), ese cambio se producirá en la fusión de las dos twigs.

Para ver por qué Git hace esto, considere la siguiente situación:

  1. sample se ramifica desde el master
  2. La persona X cambia la línea 42 en ABC en la sample
  3. La persona Y cambia la línea 54 en ABC en el master
  4. Las twigs se fusionan

Si Git se fusionó como esperabas, entonces los cambios de la persona X se habrían perdido en este caso. Al marcar línea por línea, Git conserva tantos cambios como sea posible. Tenga en count que si tanto la persona X como la persona Y hubieran cambiado la línea 42, la fusión habría resultado en un conflicto, sin importar en qué order se realizaron los cambios.