Git заменить локальную версию на удаленную версию

Как я могу сказать git игнорировать мой локальный файл и перенести его из моей удаленной ветки, не пытаясь объединить и вызвать конфликты?

Ответ 1

Это безопасное решение:

git stash

Теперь вы можете делать все, что хотите, не боясь конфликтов.

Например:

git checkout origin/master

Если вы хотите включить удаленные изменения в ведущую ветку, вы можете сделать:

git reset --hard origin/master

Это приведет к тому, что вы разветките "master", чтобы указать "origin/master".

Ответ 2

Я понимаю вопрос как это: вы хотите полностью заменить содержимое одного файла (или выбора) из восходящего потока. Вы не хотите напрямую влиять на индекс (так что вы могли бы выполнить добавление + фиксацию, как обычно).

Просто сделайте

git checkout remote/branch -- a/file b/another/file

Если вы хотите сделать это для обширных поддеревьев и вместо этого хотите напрямую влиять на индекс, используйте

git read-tree remote/branch:subdir/

Затем вы можете (необязательно) обновить рабочую копию, выполнив

git checkout-index -u --force

Ответ 3

Я понимаю, что, например, вы неправильно сохранили файл, который вы обновили только для целей тестирования. Затем, когда вы запускаете "git status", файл отображается как "Изменено", и вы говорите несколько плохих слов. Вы просто хотите вернуть прежнюю версию и продолжать работать нормально.

В этом сценарии вы можете просто запустить следующую команду:

git checkout -- path/filename

Ответ 4

Используйте параметр -s или --strategy в сочетании с опцией -X. В вашем конкретном вопросе вы хотите сохранить все удаленные файлы и заменить локальные файлы с тем же именем.

Заменить конфликты с удаленной версией

git merge -s recursive -Xtheirs upstream/master  

будет использовать версию удаленного репо всех конфликтующих файлов.

Заменить конфликты с локальной версией

git merge -s recursive -Xours upstream/master

будет использовать локальную версию репо всех конфликтующих файлов.