Una sostituzione per git merge
questo sovrascriverà i file non tracciati
I commenti qui sotto usano 'FOI' per i 'file di interesse', i file che
- esiste nel ramo donatore,
- non esistono nel ramo ricevente,
- e stanno bloccando l'unione perché sono presenti e non tracciati nella directory di lavoro.
git checkout -f donor-branch # replace FOI with tracked `donor` versions
git checkout receiving-branch # FOI are not in `receiving`, so they disapppear
git merge donor-branch # now the merge works
Una sostituzione per git pull
questo sovrascriverà i file non tracciati
pull = fetch + merge
, quindi seguiamo git fetch
il git checkout -f, git checkout, git merge
trucco sopra.
git fetch origin # fetch remote commits
git checkout -f origin/mybranch # replace FOI with tracked upstream versions
git checkout mybranch # FOI are not in mybranch, so they disapppear
git merge origin/mybranch # Now the merge works. fetch + merge completes the pull.
Spiegazione dettagliata
git merge -f
non esiste, ma git checkout -f
esiste.
Utilizzeremo git checkout -f
+ git checkout
per rimuovere i file di interesse (vedi sopra), quindi la tua unione può procedere normalmente.
Passaggio 1. Questo passaggio sostituisce forzatamente FOI non monitorato con versioni tracciate del ramo donatore (verifica anche il ramo donatore e aggiorna il resto della directory di lavoro).
git checkout -f donor-branch
Passaggio 2. Questo passaggio rimuove i FOI perché vengono tracciati nel nostro ramo (donatore) corrente e assenti nel receiving-branch
passaggio a.
git checkout receiving-branch
Passaggio 3. Ora che gli FOI sono assenti, l'unione nel ramo del donatore non sovrascriverà alcun file non tracciato, quindi non otteniamo errori.
git merge donor-branch