正如在这个问题中问到的,我也想知道如何解决一个冲突的git stash pop而不添加所有的修改提交(就像“git stash pop”没有冲突一样)。

我目前的方法非常不酷,因为我是这样做的:

git stash pop  # -> CONFLICT
git stash drop
# [resolve conflict]
# [add conflict files]
git reset HEAD # <all files that are in commit-mode>

如何繁殖:

mkdir foo; cd foo; git init
echo "1" > one
echo "2" > two
git add -A; git commit -m "first"
echo "1.1" > one
echo "2.1" > two
git stash
echo "2.2" > two
git commit -a -m "second"
echo "Only this file would stay in HEAD without the conflict" > third
git add third
git stash pop
git status

2016-06-27:在示例中添加了一个名为“third”的新文件,以显示像来自scy的解决方案这样的变通方法只适用于空的HEAD,但不能解决最初的问题,即HEAD没有相同的内容,例如git隐藏弹出而没有冲突。


当前回答

看起来这可能就是你在寻找的答案,我个人还没有尝试过,但看起来它可能会奏效。使用此命令,GIT将尝试像以前一样应用更改,而不会尝试添加所有更改以提交。

Git stash应用——index

以下是完整的解释:

http://git-scm.com/book/en/Git-Tools-Stashing

其他回答

这不是最好的方法,但它是有效的:

$ git stash apply
$ >> resolve your conflict <<
$ >> do what you want to do with your code <<
$ git checkout HEAD -- file/path/to/your/file

请确保如果你正在为git使用源代码树,他们会说提交你的更改或冲突。请不要这样做,

而不是打开你的终端并输入

git add .
git stash

这个源树告诉你“提交你的更改,因为他们不知道这个更改是否冲突,但他们正试图采取备份以确保安全。”

这个git stash命令将删除合并的冲突。 谢谢你!

回答那些遇到git隐藏问题的人-你没有干净地应用

如果你用git stash -u创建了一个存储库呢?那么这个问题的大部分答案都是无效的!因为只要你遵循了排名最高的答案(这个:https://stackoverflow.com/a/27382210/816017)给出的建议——即使用git stash drop(我的建议:不要这样做),你的非暂存文件就会消失。

这是一个冗长的介绍,要说以下几点:

如果你在做git stash pop时遇到了Merge冲突的问题,并且你已经使用了git stash -u,那么摆脱这种情况的一种方法是:

git stash branch my-stash-branch Do whatever you need to fix the diff. Hard diffs: Manually copy the offending files to a non-git folder, and then do git restore myfile, then apply the changes manually Easy diffs: If the conflict is just in some throwaway file like Cargo.lock or yarn.lock just git restore Cargo.lock. Do git stash -u again git checkout my-actual-branch git stash pop which should apply cleanly now, otherwise rinse & repeat Remove the my-stash-branch once you are confident your changes have been applied correctly.

简而言之:用粗体字写着“不要追随其他答案……”的答案并不适合所有人!尤其是当你使用git stash -u时。您的更改可能会丢失!

脚注:

如果你挖掘git fsck,可能会发现git stash drop丢失的非暂存文件-如果我没有弄错的话,它们不在reflog中。

看起来这可能就是你在寻找的答案,我个人还没有尝试过,但看起来它可能会奏效。使用此命令,GIT将尝试像以前一样应用更改,而不会尝试添加所有更改以提交。

Git stash应用——index

以下是完整的解释:

http://git-scm.com/book/en/Git-Tools-Stashing

Git stash分支将工作,它为您创建一个新分支,签出 当你在那里存放你的工作时,你在那里重新应用你的工作,然后 然后,如果应用成功,就放弃收藏。检查这个