为什么 git stash 不能放弃刚才所做的更改?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12139812/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 07:25:30  来源:igfitidea点击:

why git stash cannot abandon the changes made just now?

gitgithubgit-pullmerge-conflict-resolutiongit-stash

提问by hugemeow

i forked a project from github, and the origin point to my own github repo, remote point to its original repo, since i want to get update from remote,

我从 github 分叉了一个项目,原点指向我自己的 github 存储库,远程指向其原始存储库,因为我想从远程获取更新,

i use git pull remote branch_name, then my local repo is in conflict mode, now i want to cancel the effect of git pull, so i use git stash, but was surprised to find i failed to do this? what's wrong?

我使用git pull remote branch_name,然后我的本地repo处于冲突模式,现在我想取消git pull的效果,所以我使用git stash,但很惊讶地发现我没有这样做?怎么了?

the detailed info is as follows:

详细信息如下:

[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

so how to cannel the effect of git pull? should i delete repo, and download it again?

那么如何消除 git pull 的影响呢?我应该删除repo,然后重新下载吗?

回答by user1338062

Run git merge --abort.

运行git merge --abort

You are in the middle of a merge, so stashing is definitely not something you should do (you would lose the history information associated with the merge).

您正处于合并过程中,因此存储绝对不是您应该做的事情(您将丢失与合并相关的历史信息)。

回答by CharlesB

git stashis to save the changes for future use, not for canceling a conflicted state, that's why it doesn't work.

git stash是保存更改以备将来使用,而不是取消冲突状态,这就是它不起作用的原因。

Instead use git reset ORIG_HEAD(see How to undo a git pull?)

而是使用git reset ORIG_HEAD(请参阅如何撤消 git pull?