Git Потянуть при игнорировании локальных изменений?

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

Ответ 1

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

git reset --hard
git pull

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

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

git stash
git pull
git stash pop

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

Ответ 2

Для меня работало:

(1) Сначала выберите все изменения:

$ git fetch --all

(2) Затем reset мастер:

$ git reset --hard origin/master

(3) Pull/update:

$ git pull

Ответ 3

Команда ниже обычно не работает. Если вы просто:

$ 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'

Ответ 4

Вам просто нужна команда, которая дает тот же результат, что и 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

Ответ 5

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

Ответ 6

Посмотрите git stash, чтобы поместить все ваши локальные изменения в "файл-зашифрованный" и вернуться к последнему фиксации. В этот момент вы можете применить свои спрятанные изменения или отказаться от них.

Ответ 7

Если вы находитесь в Linux:

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

Цикл for удалит все отслеживаемые файлы, которые были изменены в локальном репо, поэтому git pull будет работать без проблем.
Самое приятное в этом состоит в том, что только файлы с отслеживанием будут перезаписаны файлами в репо, все остальные файлы останутся нетронутыми.

Ответ 8

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

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

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

Ответ 9

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

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

Ответ 10

.gitignore

"Добавление нежелательных файлов в .gitignore работает до тех пор, пока вы изначально не зафиксировали их в какой-либо ветки".

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

git update-index --assume-неизмененное имя файла

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

Ответ 11

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

git checkout .
git pull

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