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

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

265
задан markdorison 11 нояб. '10 в 20:19
источник поделиться
7 ответов

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

git reset --hard
git pull

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

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

git stash
git pull
git stash pop

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

463
ответ дан Jefromi 11 нояб. '10 в 20:25
источник поделиться

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

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

$ git fetch --all

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

$ git reset --hard origin/master

(3) Pull/update:

$ git pull
110
ответ дан Artur Barseghyan 23 марта '15 в 11:42
источник поделиться

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

$ 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'
14
ответ дан Dr Beco 24 нояб. '14 в 3:10
источник поделиться

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

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

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

7
ответ дан Strahinja Kustudic 06 нояб. '12 в 2:40
источник поделиться

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

7
ответ дан Seth Johnson 11 нояб. '10 в 20:23
источник поделиться
git fetch --all && git reset --hard origin/master
1
ответ дан Luca C. 12 сент. '17 в 18:26
источник поделиться

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

git fetch && git merge --ff-only origin/master
0
ответ дан Petah 06 мая '16 в 0:04
источник поделиться

Другие вопросы по меткам