Il trucco è in "aggiunta di una versione all'indice": ciò contrassegna il file come risolto (ovvero non più "nostro" o "loro").
Quindi deve essere l'ultimo passaggio.
Forse qualcosa di simile:
git show :3:<filename> > <filename>.theirs # save the "theirs" version in a tmp file
git show :2:<filename> > <filename> # display the "ours" version in the working dir
git add <filename> # add it to the index
# (marking the conflicting file as resolved)
move <filename>.theirs <filename> # erasing the file with the "theirs" version
# in the working directory
Non esattamente "indolore" ...
Per evitare il file temporaneo, Jakub Narębski suggerisce di utilizzare git update index
(un comando idraulico) per manipolare direttamente l'indice.
--replace --cacheinfo <mode> <object> <path>
--cacheinfo
viene utilizzato per registrare un file che non si trova nella directory di lavoro corrente. Questo è utile per la fusione con il check-out minimo.
Per impostazione predefinita, quando un indice di file esiste nell'indice, git update-index rifiuta un tentativo di aggiungere path/file
. Allo stesso modo, se esiste un file path/file
, non è possibile aggiungere un percorso file. Con il flag --replace
, le voci esistenti che sono in conflitto con la voce aggiunta vengono automaticamente rimosse con messaggi di avviso.
In realtà è la "nostra" versione (dal ramo corrente che si fondono in), la versione "loro" (dal ramo che si sta unendo) e la versione "antenato" (antenato comune di entrambi i rami) - non la versione precedente in generale. –