почему git stash не может отказаться от изменений, сделанных только что?

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

я использую git pull remote branch_name, тогда мое локальное репо находится в режиме конфликта, теперь я хочу отменить эффект git pull, поэтому я использую git stash, но был удивлен, обнаружив, что мне это не удалось? что случилось?

подробная информация выглядит следующим образом:

[mirror@home weechat]$ git status
# On branch master
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      CMakeLists.txt
#       both modified:      ChangeLog
#       both modified:      NEWS
#       both modified:      configure.in
#       both modified:      po/cs.po
#       both modified:      po/de.po
#       both modified:      po/es.po
#       both modified:      po/fr.po
#       both modified:      po/hu.po
#       both modified:      po/ru.po
#       both modified:      po/weechat.pot
#       deleted by us:      src/irc/irc-server.c
#       both modified:      weechat.spec
#
no changes added to commit (use "git add" and/or "git commit -a")
[mirror@home weechat]$ git stash
CMakeLists.txt: needs merge
ChangeLog: needs merge
NEWS: needs merge
configure.in: needs merge
po/cs.po: needs merge
po/de.po: needs merge
po/es.po: needs merge
po/fr.po: needs merge
po/hu.po: needs merge
po/ru.po: needs merge
po/weechat.pot: needs merge
src/irc/irc-server.c: needs merge
weechat.spec: needs merge
CMakeLists.txt: needs merge
ChangeLog: needs merge
NEWS: needs merge
configure.in: needs merge
po/cs.po: needs merge
po/de.po: needs merge
po/es.po: needs merge
po/fr.po: needs merge
po/hu.po: needs merge
po/ru.po: needs merge
po/weechat.pot: needs merge
src/irc/irc-server.c: needs merge
weechat.spec: needs merge
CMakeLists.txt: unmerged (118d776a202cfc6688290e96fca20ac4f8631f5e)
CMakeLists.txt: unmerged (d05c9a9711a965dcad0aefa03b79ae7a4f5cb8fb)
CMakeLists.txt: unmerged (dd2b14cb188e1927e098705d77e922ad530e232b)
ChangeLog: unmerged (764711936b54aa75812828e1ab15e1632aa3eb9d)
ChangeLog: unmerged (e00d4bf654c3d199e24bf4910b066f1659fea4b6)
ChangeLog: unmerged (dbec2315ffc1f15feede248abe3ed85beaa82ed7)
NEWS: unmerged (457d5443548e6130b50e42a9c87a6f2e8ba4c596)
NEWS: unmerged (706cee4b8853013f20129ccb2fa9057b7500fceb)
NEWS: unmerged (33afffbac62399faa32e2560a9accd95dd9a050e)
configure.in: unmerged (8e1058e5e00a5e671459cee8300420b0488560d9)
...
fatal: git-write-tree: error building trees
Cannot save the current index state

так как же отменить эффект git pull? я должен удалить репо и загрузить его снова?


person hugemeow    schedule 27.08.2012    source источник


Ответы (2)


Выполнить git merge --abort.

Вы находитесь в процессе слияния, поэтому вам определенно не следует скрывать данные (вы потеряете информацию об истории, связанную со слиянием).

person user1338062    schedule 27.08.2012
comment
почему git stash потеряет историю? какую историю он потеряет? я думаю, что pull может произойти только тогда, когда все изменения будут зафиксированы :) - person hugemeow; 27.08.2012
comment
Запуск git reset; git stash save позволит вам сохранить состояние рабочего каталога, но потеряет всю конфликтную информацию, так как сбрасывает индекс. - person jpaugh; 01.03.2019

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

Вместо этого используйте git reset ORIG_HEAD (см. Как отменить git pull?)

person CharlesB    schedule 27.08.2012
comment
тайник используется для отказа от модификации, почему он используется для сохранения изменений? - person hugemeow; 27.08.2012
comment
Нет, тайник используется для сохранения изменений, внесенных в рабочую копию, и их удаления с целью последующего восстановления с помощью git stash pop. Отказ от изменений осуществляется git reset - person CharlesB; 28.08.2012
comment
в какой ситуации я должен использовать git stash? если я использую git reset здесь, история слияния будет потеряна, но если я использую git stash, это не работает, почему? так как я не могу сохранить код, который находится в конфликте, верно? - person hugemeow; 28.08.2012