Замена для 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. Этот шаг удаляет информацию о свободе информации, потому что они отслеживаются в нашей текущей (донорской) ветке и отсутствуют в той, на которую receiving-branch
мы переключаемся.
git checkout receiving-branch
Шаг 3. Теперь, когда FOI отсутствует, слияние в ветке-доноре не перезапишет никакие неотслеживаемые файлы, поэтому мы не получим ошибок.
git merge donor-branch