Zastąpienie git merge
tego spowoduje zastąpienie nieśledzonych plików
Poniższe komentarze używają „FOI” dla „interesujących plików”, czyli plików, które
- istnieje w oddziale dawcy,
- nie istnieją w oddziale odbierającym,
- i blokują scalanie, ponieważ są obecne i nie są śledzone w twoim katalogu roboczym.
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
Zastąpienie git pull
tego spowoduje zastąpienie nieśledzonych plików
pull = fetch + merge
, Więc nie git fetch
następuje git checkout -f, git checkout, git merge
sztuczki powyżej.
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.
Szczegółowe wyjaśnienie
git merge -f
nie istnieje, ale istnieje git checkout -f
.
Użyjemy git checkout -f
+git checkout
do usunięcia interesujących plików (patrz wyżej), a następnie scalenie może przebiegać normalnie.
Krok 1. Ten krok wymusza zastąpienie niewyśledzonego FOI śledzonymi wersjami gałęzi dawcy (sprawdza również gałąź dawcy i aktualizuje resztę działającego katalogu).
git checkout -f donor-branch
Krok 2. Ten krok usuwa FOI, ponieważ są one śledzone w naszym obecnym oddziale (dawcy) i nieobecne w receiving-branch
przełączamy się do.
git checkout receiving-branch
Krok 3. Teraz, gdy FOI jest nieobecny, scalenie w gałęzi dawcy nie zastąpi żadnych nieśledzonych plików, więc nie otrzymujemy błędów.
git merge donor-branch