Заміна на git merge
це замінить незатребувані файли
У коментарях нижче використовується "FOI" для "файлів, що цікавлять", файли, які
- існують у донорській галузі,
- не існують у приймальній гілці,
- і блокують злиття, оскільки вони присутні і не відслідковуються у вашому робочому каталозі.
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
Заміна на git pull
це замінить незатребувані файли
pull = fetch + merge
, Так що ми з git fetch
наступним git checkout -f, git checkout, git merge
трюком вище.
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.
Детальне пояснення
git merge -f
не існує, але є git checkout -f
.
Ми будемо використовувати git checkout -f
+ git checkout
для видалення файлів, що цікавлять (див. Вище), і тоді ваше злиття може продовжуватися нормально.
Крок 1. Цей крок примусово замінює відслідковуваний FOI відслідковуваними версіями донорської гілки (він також перевіряє гілку донора та оновлює решту робочого режиму).
git checkout -f donor-branch
Крок 2. Цей крок видаляє FOI, оскільки вони відслідковуються в нашій поточній (донорській) гілці та відсутні в receiving-branch
переході до якого ми переходимо.
git checkout receiving-branch
Крок 3. Тепер, коли FOI відсутній, злиття у донорській гілці не перезапише жодних нераспечатанных файлів, тому ми не отримаємо помилок.
git merge donor-branch