Una sostituzione per git mergequesto 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 pullquesto sovrascriverà i file non tracciati
pull = fetch + merge, quindi seguiamo git fetchil git checkout -f, git checkout, git mergetrucco 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 -fnon esiste, ma git checkout -fesiste.
Utilizzeremo git checkout -f+ git checkoutper 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-branchpassaggio 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