假设我正在编辑一个文件。如果我保存文件,git-diff
会给我它相对于索引的更改。我想在不先保存文件的情况下获取相对于索引的更改——对于“实时”差异。
一种解决方案是将未保存的更改写入临时文件(即将文件保存在其他位置),git show :file > tempfile2
然后将暂存文件写入另一个临时文件( )git-diff tempfile tempfile2
。然而,这似乎不优雅。
有没有更好的办法?
假设我正在编辑一个文件。如果我保存文件,git-diff
会给我它相对于索引的更改。我想在不先保存文件的情况下获取相对于索引的更改——对于“实时”差异。
一种解决方案是将未保存的更改写入临时文件(即将文件保存在其他位置),git show :file > tempfile2
然后将暂存文件写入另一个临时文件( )git-diff tempfile tempfile2
。然而,这似乎不优雅。
有没有更好的办法?
自git 1.5.1以来,有一个选项可以区分标准输入 - 它只是没有记录在案
$ echo foo | git diff --no-index -- my_file -
在玩这个多一点时,我意识到这可能不是 OP(或我)想要的 - 它将文件的当前状态差异到标准输入,而不是文件的最后提交状态到标准输入。像这样的事情会做到这一点
$ echo foo | diff -u <(git show :my_file) -
请注意,这确实意味着直接调用 diff 可能不会在您的 git 配置中获取某些设置。基本上正如 ams 在他的回答中所说的那样。
改进 Ash Berlin 的回答。
这允许您使用 git-diff 的优秀功能。
git show :file | git diff --no-index -- - temp_saved_path
请注意,这仍然可能不像您希望的那样方便,因为您仍然必须写入临时文件。在您保存文件之前,这些更改要么根本不在磁盘上(仅在内存中),要么在某种依赖于编辑器的临时文件中。Vim 有可能一步无缝地做到这一点,但我还不够熟悉。