为什么“git stash pop”紧跟在“git stash --keep-index”之后会导致冲突?

qncylg1j  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(182)

何月道:

$ git stash --keep-index
$ git stash pop

Git让我解决冲突。
我做错了什么吗?我如何隐藏未暂存的文件(测试程序),然后返回所有的文件(这样我就可以保留所有未暂存的文件,而未暂存的文件又回来了,并且是未暂存的)?

noj0wjuj

noj0wjuj1#

问题来自--keep-index。您隐藏的更改与您已经暂存的更改冲突。
以下是您可以用来重现

echo bar > foo
git add foo
echo baz > foo
git stash --keep-index
git stash pop #CONFLICT

在这种情况下,git不知道bar或baz是否应该出现在foo中。
解决方案是不使用--keep-index参数或提交您首先添加的更改(您始终可以在以后修改您的提交)
您也可以让您的工作目录处于使用git stash branch <branchname>之前的状态(然后您必须合并分支)

bnl4lu3b

bnl4lu3b2#

git stash保存从HEAD状态到工作树状态的转换。它还将工作树设置为 HEAD 状态。
git stash --keep-index保存从HEAD状态到工作树状态的转换。它还将工作树设置为 index 状态。
git stash pop应用上次保存的转换。因此,如果工作树未处于HEAD状态(例如在暂存对索引的更改并执行git stash --keep-index之后),则可能存在冲突。您可以在执行git stash pop之前执行git reset --hard将工作树设置为HEAD状态,以避免冲突。

相关问题