Чи є спосіб зробити 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
для видалення не відстежуваних або ігнорованих файлів або каталогів.
Якщо з іншого боку ви хочете якось зберегти локальні модифікації, ви використовуєте приховування, щоб приховати їх, перш ніж витягувати, а потім знову застосувати їх:
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 reclone
чи git sync
), ні робить СВН забезпечують таку команду (наприклад, 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.
і так далі...
Щоб по- справжньому почати, завантажуючи гілку та переписуючи всі ваші локальні зміни, просто виконайте:
$ 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, щоб помістити всі ваші локальні зміни у "файл сховання" та повернутись до останнього комітету. У цей момент ви можете застосувати сховані зміни або відхилити їх.
Якщо ви працюєте в 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-create.html