git stash и git pull

87

Я новичок в Git и использую плагин EGit eclipse для фиксации.

Я изменил несколько файлов и спрятал изменения, затем сделал git pullв командной строке, которая подтянула все последние коммиты. Потом сделал Apply stashed changesиз EGit. Теперь он применил мои изменения, и изменения, извлеченные из последней фиксации спрятанных файлов, исчезли. Я не уверен, почему он не спросил меня о конфликтах слияния, перезаписал мои изменения и потерял предыдущие изменения коммитов.

Как получить эти изменения?

Лолли
источник
Это звучит неправдоподобно. Применение stash либо вносит неконфликтные изменения, либо вызывает конфликты слияния. Я думаю, ты забыл кое-что упомянуть. Кроме того, вы можете повторить свои шаги, скорее всего, ваш тайник все еще в списке, используйте, git stash listчтобы показать его.
kan

Ответы:

207

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

git stash 

Это сохранит ваши изменения и очистит отчет о состоянии.

git pull

Это приведет к изменениям из ветки восходящего потока. Убедитесь, что в отчете написано «Ускоренная перемотка вперед». Если это не так, вы, вероятно, делаете непреднамеренное слияние.

git stash pop

Это применит сохраненные изменения обратно к рабочей копии и удалит изменения из тайника, если у вас нет конфликтов. В случае конфликта они останутся в тайнике, чтобы вы могли начать все сначала.

если тебе нужно посмотреть, что у тебя в тайнике

git stash list
Йылмажусейн
источник
@java_newbie, если хочешь сделать это с заначкой и не тянуть, выхода нет. Но вы можете добиться того же результата с помощью rebase. Команда 'git rebase origin / <имя ветки восходящего потока>' должна делать то же самое.
yilmazhuseyin
5
Думаю, это сработает:git stash && git pull && git stash pop
Фабрис Кабонго
@yilmazhuseyin Что вы подразумеваете под «одинаковым результатом». Можете ли вы рассказать анекдот, если можете? Вы имели в виду, git rebase origin/masterчто даст такой же результат, как git stash; git pull; git stash pop?
nehem
8
Если вы используете Git v2.9.0 или более позднюю версию, попробуйте git pull --rebase --autostash. К вашему сведению
momocow 05
1
Кто --autostashвсегда работает? Например, если у меня есть неотслеживаемые файлы, которые частично уже находятся в Git?
qräbnö