使用Git的耐心差异算法进行交互式添加

me_*_*and 20 git git-diff git-add git-patch

我想使用Git的耐心差异算法(如果你git diff--patience参数调用你得到的算法)git add -p.我怎样才能做到这一点?

背景:我正在使用一些XML文件,并且由于"未对齐"的进入/退出标记,git diff正常算法会产生相当差的差异.如果我运行git diff --patience,我会得到更多有用的差异,但没有明显的方法来使用这些差异git add -p.

Tob*_*obu 33

git add -p目前拒绝diff标志,但您可以使用diff.algorithmconfig选项:

git config --global diff.algorithm patience
Run Code Online (Sandbox Code Playgroud)

Git 1.8.2中的新功能.


Amr*_*mro 10

这对我有用:

git -c diff.algorithm=patience add -p [...]
Run Code Online (Sandbox Code Playgroud)

我在Cygwin运行最新的git v2.1.0.

  • 是的,正如@Tobu在接受的答案中已经注意到的那样,在Git v1.8.2中添加了配置标志.事实证明,在Cygwin上获得最新Git构建的方法是接管维护人员,这正是我最终做的:) (2认同)

Chr*_*her 5

嗯...您可以做的一件事是将 的输出通过管道传输git diff到临时位置,然后使用以下命令将其读回git apply

git diff --patience <commitA> <commitB> > /tmp/patch.out
# checkout a new branch or otherwise do what you need to prep
git apply < /tmp/patch.out
Run Code Online (Sandbox Code Playgroud)

这会将 diff 的输出应用到工作目录,但不会提交或暂存更改。然后您可以git add -p像平常一样运行,--patience差异将是您交互式添加的更改。

如果它更适合您的工作流程,您没有理由不能直接通过管道diff连接。apply这是我在重建自己的本地分支机构以进行生产集成时经常做的事情。

看起来您也可以将其用作合并策略,因此可能的情况是,您可以简单地创建一个包含所需内容的分支,然后将其合并,而不是交互式地添加差异。