Есть ли способ сделать, git pull
что игнорирует любые локальные изменения файла, не удаляя каталог и не выполняя git clone
?
rm -rf local_repo && git clone remote_url
.
Есть ли способ сделать, git pull
что игнорирует любые локальные изменения файла, не удаляя каталог и не выполняя git clone
?
rm -rf local_repo && git clone remote_url
.
Ответы:
Если вы хотите, чтобы вытяжка перезаписывала локальные изменения, выполняя слияние, как если бы рабочее дерево было чистым, ну, очистите рабочее дерево:
git reset --hard
git pull
Если есть неотслеживаемые локальные файлы, вы можете использовать их git clean
для удаления. Используется git clean -f
для удаления неотслеживаемых файлов, -df
для удаления неотслеживаемых файлов и каталогов, а также -xdf
для удаления неотслеживаемых или игнорируемых файлов или каталогов.
С другой стороны, если вы хотите как-то сохранить локальные модификации, вы бы использовали stash, чтобы скрыть их перед извлечением, а затем повторно применить их:
git stash
git pull
git stash pop
Однако я не думаю, что имеет смысл буквально игнорировать изменения - половина извлечения - это слияние, и ему необходимо объединить зафиксированные версии контента с версиями, которые были извлечены.
git reset
ваши файлы по-прежнему отличаются от удаленного, прочитайте stackoverflow.com/questions/1257592/…
git reset --hard
влияет на первое, а не второе. Если вы хотите полностью восстановить состояние пульта, git reset --hard origin/<branch>
- но часто и в этом случае эти два коммита, по которым вы опережаете источник, - это работа, которую вы сделали, а не то, что вы хотите выбросить.
Для меня сработало следующее:
(1) Сначала получите все изменения:
$ git fetch --all
(2) Затем сбросьте мастер:
$ git reset --hard origin/master
(3) Извлечение / обновление:
$ git pull
Вы просто хотите команду, которая дает точно такой же результат, как 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 clean -fxd
удаляет файлы .gitignore
также.
Команда ниже не будет работать всегда . Если вы просто:
$ 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'
Посмотрите на git stash, чтобы поместить все ваши локальные изменения в «stash-файл» и вернуться к последнему коммиту. В этот момент вы можете применить свои скрытые изменения или отменить их.
Если вы используете Linux:
git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
Цикл for удалит все отслеживаемые файлы, которые были изменены в локальном репо, поэтому git pull
будет работать без проблем.
Самое приятное в этом то, что только файлы отслеживания будут перезаписаны файлами в репо, все остальные файлы останутся нетронутыми.
это сработало для меня
git fetch --all
git reset --hard origin/master
git pull origin master
с принятым ответом я получаю конфликтные ошибки
Я обычно делаю:
git checkout .
git pull
В корневой папке проекта.
.gitignore
«Добавление ненужных файлов в .gitignore работает до тех пор, пока вы изначально не отправили их в какую-либо ветку».
Также вы можете запустить:
git update-index --assume-unchanged filename
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html