正如在这个问题中问到的,我也想知道如何解决一个冲突的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 add -u,然后执行git reset HEAD,这甚至不涉及提交。

其他回答

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

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

Git stash应用——index

以下是完整的解释:

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

您可以使用git reset HEAD文件来解决冲突,而不是添加您为解决冲突所做的更改,而无需暂存您的更改。

但是,您可能必须运行该命令两次。一次是将冲突标记为已解决,一次是取消冲突解决例程所进行的更改。

有可能应该有一个重置模式,同时做这两件事,虽然现在没有一个。

根据git的隐藏问题,在修复冲突后,git add <file>是正确的操作过程。

在阅读了这条评论之后,我才明白更改会自动添加到索引中(通过设计)。这就是为什么git add <file>完成了冲突解决过程。

git add .
git reset

Git添加。是否会显示所有的文件告诉git你已经解决了冲突

git reset将取消所有暂存文件而不创建提交