我想使用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
中没有明显的方法可以使用这些差异。
答案 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,,因此可能会出现这样的情况:您可以简单地创建一个包含所需内容的分支,然后将其合并,而不是以交互方式添加差异。