我完全喜欢git add -p
and git stash
但我偶尔会遇到以下问题,该问题是通过以下命令序列重现的:
-
git add -p my_file
: 然后我手动编辑大块 (using e
)因为 git 建议的分割不适合我
-
git stash --keep-index
:然后我做一些测试,如果测试通过我不承诺
-
git stash pop
:现在出现问题:文件my_file
现在被认为是冲突的,并且 git 完全搞乱了我编辑的大块,所以我必须编辑文件,删除无用的合并标记,然后运行git add my_file
其次是git reset HEAD
我很困惑,因为只有在手动编辑块时才会发生这种情况。我完全不明白这会有什么不同。
要重现该问题:
touch newfile
git add newfile
git commit -m 'newfile'
- 在文件中添加两行
git add -p newfile
- 编辑大块头(
e
),删除 hunk 中的一行,然后退出 git add (q
)
git stash --keep-index
git stash pop
现在文件newfile
处于未合并状态。再次注意,问题仅发生在手动编辑的帅哥身上。如果不手动编辑任何块,上述命令没有任何问题。
顺便说一句,文件的先前状态处于第三阶段(git show :3:newfile
),之前上演的版本处于第二阶段(git show :2:newfile
)。因此,我可以通过一些 git 黑魔法,设法将第二阶段放入该索引中,并将第三阶段放入工作存储库中......但我不知道该怎么做,所以我手动完成。 :-(
要创建和测试包含部分工作树更改(包括手动编辑的块)的索引,请执行以下操作:
git add --patch <files>
git stash --keep-index
<test the indexed changes>
git reset --hard
git stash pop --index
此时不存在冲突,并且存储库、索引和工作目录处于紧邻之前的状态git stash
。你现在可以git commit
索引的更改。
当然,这很奇怪而且不太直观,我真的很想知道是否有更简单的方法来做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)