首页 > 解决方案 > 直接 diff 本地文件在 Git 中提交

问题描述

我想使用外部差异工具在提交和我的本地文件之间运行差异,而我的本地没有临时文件。我在 Windows 上运行 git。

我目前正在尝试使用:git difftool --dir-diff <commit> -- <path_to_local_dir>。这种方法工作正常,但是<path_to_local>然后由AppData 中的临时文件夹表示。对于大多数用途,这很好。

但是,使用外部差异工具(在我的情况下为 BeyondCompare4),差异工具提供了“复制”特定更改的<commit>功能<path_to_local>。这就是我的问题所在。如果 Git 强制对本地文件使用临时文件夹,那么“复制”行为是无用的,因为它只是修改临时文件。

我知道我可以编写一个脚本,在保存后将temp的内容复制到我的本地文件中,但我正在寻找一个更优雅的解决方案。

作为旁注,默认情况下,Mercurial 似乎支持请求的行为(仅在本地文件不存在时创建临时文件)

所以,简而言之,有没有办法强制git difftool实际使用本地文件,而不是为我已经存在的本地文件创建和使用临时文件?

编辑:单词用法

标签: gitgit-diff

解决方案


就像我做很多事情一样,我最终过度思考了这个问题。

事实证明,如 git difftool 文档中所述,git difftool默认情况下对工作树中的文件使用符号链接。

符号链接的完整解释在这里。简单的解释是,如果您修改一个文件的符号链接,您实际上是在修改该文件。

在 Windows 上,问题变得更加不清楚,因为 Git 的默认行为是--no-symlinks,但最终结果应该是相同的。

简短的回答:只需单击临时文件上的保存。更改应显示在您的本地文件中。


推荐阅读