我非常喜欢
git add -p
和git stash
,但偶尔会遇到以下问题,该问题可以通过以下命令序列重现:
git add -p my_file
:接下来我手动编辑一个 hunk (使用e
),因为git建议的拆分不适合我。git stash --keep-index
:然后我进行一些测试,如果测试通过,我就不提交git stash pop
:现在出现了问题:my_file
文件 被视为冲突,而且git已经完全搞乱了我的编辑的hunk,所以我必须编辑文件,删除无用的合并标记,并运行git add my_file
,接着是git reset HEAD
我很困惑,因为这只发生在手动编辑 hunk 的情况下。我不明白这应该有何区别。
要重现这个问题:
touch newfile
git add newfile
git commit -m'newfile'
- 在文件中添加两行
git add -p newfile
- 编辑 hunk (
e
),在 hunk 中删除其中一行,然后退出 git add (q
) git stash --keep-index
git stash pop
现在,文件newfile
处于未合并状态。请注意,再次强调,如果没有手动编辑任何 hunk,则上述命令不会有任何问题。
顺带一提,文件的前一个状态位于第三阶段(git show :3:newfile
),之前托管的版本位于第二阶段(git show :2:newfile
)。因此,通过某些 git 黑魔法,我可以将第二阶段放入此索引中,并将第三阶段放入工作库中......但我不知道如何做到这一点,所以我只能手动处理。 :-(
git add -p
中,对我来说一直都很好用。顺便说一下,我使用的是Linux系统。听起来像是一个bug -- 我建议你在git邮件列表上询问,他们会非常乐意帮助解决问题。 - Sven Marnach