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

148

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

ryudice
источник
1
Смотрите SO answer " git command для создания одной ветви как другой " для всех текущих возможных способов симуляцииgit merge -s their .
VonC
Было бы полезно, если бы вы могли предоставить более подробную информацию. Вы хотите перенести содержимое всех файлов из удаленной ветки или только некоторые из файлов (т.е. сохранить некоторые локальные версии / изменения)? У вас есть какая-нибудь местная история, которую вы хотите сохранить? (Это может быть важно, если есть какие-либо другие ветки или репозитории, которые уже включили вашу локальную историю.) Если вы хотите сохранить свою локальную историю, что вы планируете делать с ней позже? (Вы можете оставить тег, указывающий на локальную историю, и просто сбросить свою ветку до того, что есть у пульта, или вы можете захотеть «объединить их»).
Крис Джонсен

Ответы:

169

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

git stash

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

Например:

git checkout origin/master

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

git reset --hard origin/master

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

Оливье Вердиер
источник
90
Возможно, стоит отметить, что это отсоединит HEAD - спрашивающий может предпочесть остаться на ветке сgit stash; git fetch origin; git reset --hard origin/master
Mark Longair
10
Я думаю, что комментарий Марка Лонгаира является актуальным ответом на этот вопрос
это был самый полезный ответ для меня +1
Andres
Как вернуться в состояние до git stash? git stash listпусто.
Лев
Я хочу обнять тебя
Угур Каздал
45

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

Просто делай

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

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

git read-tree remote/branch:subdir/

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

git checkout-index -u --force
sehe
источник
2
Это именно то, что я хотел. Спасибо.
Автономные приложения
11

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

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

git checkout -- path/filename
Альмир Кампос
источник
10

Я бы извлек удаленный файл из «master» (репозиторий remote / origin) следующим образом:

git checkout master <FileWithPath>

Пример: основные компоненты git checkout / indexTest.html

Бироль Эфе
источник
У меня сработало вот так "git checkout remotes / origin / master <my-file>"
saravanakumar
4

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

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

git merge -s recursive -Xtheirs upstream/master  

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

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

git merge -s recursive -Xours upstream/master

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

ЦСИ
источник