Git Тянет, Игнорируя Локальные изменения?

StackOverflow https://stackoverflow.com/questions/4157189

  •  08-10-2019
  •  | 
  •  

Вопрос

Есть ли способ сделать git pull это игнорирует любые изменения локального файла без удаления каталога и необходимости выполнять git clone?

Это было полезно?

Решение

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

git reset --hard
git pull

Если есть непростоемые локальные файлы, которые вы можете использовать git clean удалить их. Использовать git clean -f Удалить неповторимые файлы, -df Удалить неподходящие файлы и каталоги, а также -xdf Удалить неконнутые или игнорируемые файлы или каталоги.

Если с другой стороны, вы хотите как-то сохранить локальные модификации, вы бы использовали Stash, чтобы скрыть их перед потянем, затем повторно применить их впоследствии:

git stash
git pull
git stash pop

Я не думаю, что это имеет смысл буквально игнорировать Изменения, хотя - половина тяги - слияние, и она должна объединить преданные версии контента с версиями, которые она привлекла.

Другие советы

Для меня сделано следующее:

(1) Первое извлечение всех изменений:

$ git fetch --all

(2) Затем сбросьте мастер:

$ git reset --hard origin/master

(3) PUT / UPDATE:

$ git pull

Команда ниже не будет работать всегда. Отказ Если вы только что делаете:

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla

$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

и так далее...

К В самом деле Начать закончить, загрузка TheBranch и перезаписывать все свои местные изменения, просто делайте:


$ git checkout thebranch
$ git reset --hard origin/thebranch

Это будет работать просто хорошо.

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...

$ git status
# On branch thebranch
nothing to commit (working directory clean)

$ git checkout thebranch
Already on 'thebranch'

Вам просто нужна команда, которая дает точно такой же результат, как rm -rf local_repo && git clone remote_url, верно?Мне тоже нужна эта функция.Интересно, почему git не предоставляет такую команду (например, git reclone или git sync), также svn не предоставляет такой команды (например, svn recheckout или svn sync).

Попробуйте выполнить следующую команду:

git reset --hard origin/master
git clean -fxd
git pull
git fetch --all && git reset --hard origin/master

смотреть на Git Stash Чтобы поставить все свои местные изменения в «файл Stash» и вернуться к последнему коммитуру. В этот момент вы можете применить свои тайные изменения или отказаться от них.

Если вы на Linux:

git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull

Векл для LOOP удалит все отслеживаемые файлы, которые изменяются в локальном репо, так что git pull Будет работать без проблем.
Самая неплодная вещь в этом заключается в том, что только отслеживаемые файлы будут перезаписаны файлами в REPO, все остальные файлы будут оставлены нетронутыми.

Это сработало для меня

git fetch --all
git reset --hard origin/master
git pull origin master

с принятым ответом я получаю ошибки конфликтов

Это приведет к текущей ветви и попытаться быстро продвинуться вперед на мастеру:

git fetch && git merge --ff-only origin/master

.gitignore.

«Добавление ненужных файлов в .Gitignore работает так долго, как вы изначально не совершили их в любое ветви».

Также вы можете запустить:

GIT Update-index-index --assume-без изменение имени файла

https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html.

Я обычно делаю:

git checkout .
git pull

В корневой папке проекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top