Замена для 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