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

时间:2012-09-14 13:24:25

标签: git git-diff git-add git-patch

我想使用Git的耐心差异算法(如果你使用git diff参数调用--patience而使用git add -p)。我怎么能这样做?

背景:我正在处理一些XML文件,以及git diff的普通算法produces pretty poor diffs due to "misaligned" entry/exit tags。如果我运行git diff --patience,我会得到更多有用的差异,但是在git add -p中没有明显的方法可以使用这些差异。

3 个答案:

答案 0 :(得分:33)

git add -p目前拒绝差异标记,但您可以使用diff.algorithm配置选项:

git config --global diff.algorithm patience

Git 1.8.2中的新内容。

答案 1 :(得分:10)

这对我有用:

git -c diff.algorithm=patience add -p [...]

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

答案 2 :(得分:4)

嗯......你可以做的一件事就是将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

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

如果它更适合您的工作流程,则无法直接将diff传递给apply。这是我在重建我自己的本地分支机构进行生产集成时经常做的事情。

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