我弹出了一个存储,但出现了合并冲突。与重复的问题不同,我已经在目录中有一些未提交的更改需要保留。我不仅想让合并冲突消失,还要将目录恢复到弹出之前的状态。
我尝试了git merge --abort
,但是git声称没有进行任何合并。有没有一种简单的方法可以中止“stash pop”操作而不破坏我最初在目录中所做的更改?
git stash pop
,但是无法弹出生成合并冲突的存储。
如果在合并冲突时您尝试应用的存储未消失,则可以尝试检查git show stash@{0}
(可选使用--ours
或--theirs
),并与git statis
和git diff HEAD
进行比较。 您应该能够看到哪些更改来自于应用存储。如果在git stash pop
之前没有进行过暂存的更改,那么以下两个命令应该能够起作用。
git diff --name-only --cached | xargs git checkout --ours HEAD
git ls-tree stash@{0}^3 --name-only | xargs rm
man git stash
中得知:工作目录必须匹配索引。
正如@DavidG所指出的那样,如果有任何当前未暂存的修改文件冲突,则stash pop
将失败。 因此,我们不需要担心解开合并冲突,只需回到HEAD
即可。 任何剩余的已修改文件都与stash无关,并且在stash pop
之前被修改。# Result:
# Merge succeeded in m (theirs)
# Conflict in b
# Unstaged in a
# Untracked in c and d
# Goal:
# Reverse changes to successful merge m
# Keep our version in merge conflict b
# Keep our unstaged a
# Keep our untracked d
# Delete stashed untracked c
尝试使用 if 跟踪文件。
git rm <path to file>
git reset <path to file>
git checkout <path to file>
git reflog
列出所有在 git 历史中所做的更改。复制一个操作 ID 并输入 git reset ACTION_ID
。
git stash pop
的操作。这种情况下,您可以简单地使用git reset --hard
,而您的存储仍然完好无损。(这更或多或少是@BradKoch链接主题所建议的)。 - Steven Lu