正如在这个问题中问到的,我也想知道如何解决一个冲突的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隐藏弹出而没有冲突。
假设您有这样的场景,您将您的更改隐藏起来以便从原点进行拉取。可能是因为您的本地更改在某些设置文件中只是debug: true。现在你拉了,有人在那里引入了一个新场景,造成了冲突。
Git状态显示:
# On branch master
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: src/js/globals.tpl.js
no changes added to commit (use "git add" and/or "git commit -a")
好的。我决定按照Git的建议去做:我解决了冲突并承诺:
vim src/js/globals.tpl.js
# type type type …
git commit -a -m WIP # (short for "work in progress")
现在我的工作副本处于我想要的状态,但是我创建了一个我不想拥有的提交。如何在不修改工作副本的情况下摆脱该提交?等等,有一个流行的命令!
git reset HEAD^
我的工作副本没有更改,但是WIP提交已经消失了。这正是我想要的!(注意,我在这里没有使用-软,因为如果你的存储中有自动合并的文件,它们是自动分期的,因此你最终会在重置后再次分期这些文件。)
但是还有一件事:git stash pop的手册页提醒我们“应用状态可能会因冲突而失败;在这种情况下,它不会从收藏列表中删除。你需要手动解决冲突,然后手动调用git stash drop。”这正是我们现在所做的:
git stash drop
和完成。