Cuando fusiono grandes cambios, git a menudo se confunde irremediablemente porque no usa suficientes líneas de context. Se mezcla entre las terminaciones de aspecto similar de dos subrutinas diferentes que terminan con:
. return 1; . }
(puntos usados aquí para representar líneas en blanco)
Cuando uso 'git diff', puedo decir -U20 para ver 20 líneas de context. Pero, ¿puedo decirle a git que use esta bandera cuando se fusione también?
¿Podría la respuesta estar relacionada con las estrategias / opciones de fusión, tales como:
git merge -s recursive -X patience [branch]
Hasta donde yo sé, no hay forma de boost las líneas de context durante una combinación. Se supone que el algorithm de paciencia y diferencia maneja mejor su caso de uso. La página man de git-merge (1) lo describe así:
Con esta opción, merge-recursive gasta un poco más de time para evitar confusiones que a veces ocurren debido a líneas de coincidencia sin importancia (por ejemplo, llaves de distintas funciones). Úselo cuando las twigs que van a fusionarse se hayan desviado violentamente.
Dado que esto se ve exactamente como la situación que está describiendo, la paciencia parece diseñada a medida para ayudarlo. Puedes probarlo en una sucursal desechable como esta:
git checkout -b temp_merge_branch master git merge --strategy-option=patience other_branch
Si la fusión funciona limpiamente, puede avanzar rápidamente su twig principal con los resultados. Si no, puedes descartar la twig temporal y search otras alternativas.
Use estas configuraciones para get diferencias de paciencia con cinco líneas de context en todas partes:
git config --global diff.algorithm patience git config --global diff.context 5
Si usa --color-words
menudo, esto también es útil:
git config --global diff.wordRegex '[A-z0-9_]+|[^[:space:]]'
La primera configuration requiere Git 1.8.2 .