在Git的交互式补丁模式中如何更好地管理补丁?

5
我经常使用git add -p somefile以交互式的方式仅提交给定文件中的部分更改。然而,如果文件更改较为复杂,则默认的差异会出错,交互式修补命令提供的块也会出错。 git diff命令有许多选项可用于改进或自定义差异输出,包括非常有用的--anchored=<text>,但是有没有方法可以从git add -p获取更好的块?

1
git add -p 实际上是一个 Perl 脚本:git --exec-path 告诉你它的位置;在这个目录中查找 git-add--interactive。你应该能够修改它以使用 --anchored=<text> 调用 git diff - torek
使用Emacs Magit - trupanka
2
你能否展示一下困扰你的那几个代码块?比什么更好?在哪个文本中? - jthill
@torek,它不总是一个Perl脚本:https://dev59.com/6F4b5IYBdhLWcg3wlSdq#59382252 - VonC
1个回答

10
您可以尝试以下内容:

您可以尝试以下内容:

  • Define a custom hunk header suitable for your case as mentioned here

  • Try a different diff algorithm by passing it as a standalone configuration parameter to git add -p as mentioned here

    git -c diff.algorithm=<algo-name> add -p
    

    The available diff-algorithms as per git docs,

-diff-algorithm={patience|minimal|histogram|myers}

选择一种diff算法。可选的变体如下:

defaultmyers 基本的贪心diff算法。目前这个是默认算法。

minimal 花费更多时间确保产生最小可能的差异。

patience 生成补丁时使用“耐心diff”算法。

histogram 这种算法将"支持低出现次数的共同元素"扩展到了耐心算法中。

  • 使用git-gui手动选择要提交的行/块,如此处所述 herehere如下工具屏幕截图所示

git-gui

从git文档中获得以下信息:

diff.indentHeuristic
将此选项设置为true以启用实验性启发式算法,该算法可移动差异块边界,使补丁更易于阅读。

然而,根据这篇文章的内容:

从Git 2.25(2020年第一季度)开始,你甚至不必再指定--indent-heuristic(因为它已经是默认选项了)。

因此,这个参数现在已经默认设置为true。所以如果有需要,可以尝试将其设置为false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接