da https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging
Questo fondamentalmente farà una falsa fusione. Registrerà un nuovo commit di unione con entrambi i rami come genitori, ma non guarderà nemmeno il ramo in cui ti stai unendo. Registrerà semplicemente come risultato dell'unione il codice esatto nel tuo ramo corrente.
$ git merge -s ours mundo
Unisci la strategia "nostra".
$ git diff HEAD HEAD~
Puoi vedere che non c'è differenza tra il ramo in cui ci trovavamo e il risultato dell'unione.
Questo può spesso essere utile per indurre Git a pensare che un ramo è già unito quando si fa un'unione in seguito. Ad esempio, supponiamo che tu abbia ramificato un ramo di rilascio e hai fatto del lavoro su di esso che vorresti ricollegare nel tuo ramo principale ad un certo punto. Nel frattempo, è necessario eseguire il backport di alcuni bug sul master nel ramo di rilascio. È possibile unire il ramo bugfix nel ramo di rilascio e unire -s il nostro stesso ramo nel ramo principale (anche se la correzione è già presente), quindi quando unisci nuovamente il ramo di rilascio, non ci sono conflitti dal bugfix.
Una situazione che ho trovato utile se volevo che il master riflettesse le modifiche di un nuovo argomento. Ho notato che -Xtheirs non si fonde senza conflitti in alcune circostanze ... ad es
$ git merge -Xtheirs topicFoo
CONFLICT (modify/delete): js/search.js deleted in HEAD and modified in topicFoo. Version topicFoo of js/search.js left in tree.
In questo caso la soluzione che ho trovato è stata
$ git checkout topicFoo
da topicFoo, prima unisci in master usando la nostra strategia -s, questo creerà il falso commit che è solo lo stato di topicFoo. $ git merge -s il nostro maestro
controlla il commit di unione creato
$ git log
ora controlla il ramo principale
$ git checkout master
fondere il ramo argomento ma questa volta utilizzare la strategia ricorsiva -Xtheirs, questo ora ti presenterà un ramo master con lo stato di topicFoo.
$ git merge -X theirs topicFoo