Есть ли способ сделать git pull
, который игнорирует любые локальные изменения файла, не выдувая директорию, и должен выполнить git clone
?
Git Потянуть при игнорировании локальных изменений?
Ответ 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
В корневой папке проекта.