Git:手动编辑整个文件的差异以进行选择性暂存?

Git:手动编辑整个文件的差异以进行选择性暂存?,git,Git,我经常使用git add--patch来对文件进行阶段性更改;但有时,我有一个文件,其中我想暂存的更改与我不想暂存的更改非常混合。我一直在使用在登台之前手动编辑一个diff hunk的功能,但是一次编辑一个diff hunk可能会有点烦人。是否有一种方法可以手动编辑整个文件的差异,然后将其暂存,而不是每个单独的大块头?使用您喜欢的任何选项(例如,有问题的特定文件)运行git diff,将输出重定向到一个文件,编辑该文件,然后在补丁文件上运行git apply--cached--recont。请注

我经常使用
git add--patch
来对文件进行阶段性更改;但有时,我有一个文件,其中我想暂存的更改与我不想暂存的更改非常混合。我一直在使用在登台之前手动编辑一个diff hunk的功能,但是一次编辑一个diff hunk可能会有点烦人。是否有一种方法可以手动编辑整个文件的差异,然后将其暂存,而不是每个单独的大块头?

使用您喜欢的任何选项(例如,有问题的特定文件)运行
git diff
,将输出重定向到一个文件,编辑该文件,然后在补丁文件上运行
git apply--cached--recont
。请注意,这与git apply--index不同,后者尝试修补工作树文件和索引副本


就我个人而言,我不喜欢做这种事。相反,我只是将文件移开(例如,foo.c变为foo.c+),恢复当前索引副本,在编辑器中编辑该副本,直到在索引中找到我想要的副本,然后添加该副本。提交后,我可以
mv foo.c+foo.c
。我在这里遇到的问题是,索引副本不容易看到,我喜欢确切地看到我要提交的内容,而不是我要提交的内容之间差异的阴影,以及我的工作树中的内容。

当我尝试在编辑的文件上运行
git apply--cached
时,我得到了一个
损坏的补丁
错误。我忘了提到,如果不调整补丁计数,您将需要
--重新计数。
add-p
代码在运行
git apply--cached
时使用
--recontcount
。是的,
--recontcount
表示要重新计算而不是信任:-)谢谢!成功了。这正是我想要的。