是否有可能让 git 在特定文件之间产生差异,因为它现在存在,并且因为它在最后一次更改它的提交之前存在?
也就是说,如果我们知道:
$ git log --oneline myfile
123abc Fix some stuff
456def Frobble the foos
789dba Initial commit
然后 git diff 456def myfile
显示对 myfile 的最后更改。没有 git log
产生的知识也可以做同样的事情; 123abc 发生了什么变化?
最佳答案
这确实存在,但它实际上是git log
的一个特性:
git log -p [-m] [--follow] [-1] <path>
请注意 -p
也可用于显示单个提交的内联差异:
git log -p -1 <commit>
使用的选项:
-
-p
(也是-u
或--patch
) stash 在git-log
中 deeeeeeeep手册页,实际上是git-diff
的显示选项.与log
一起使用时,它会显示将为每个提交 生成的补丁,以及提交信息——并且 stash 未触及指定<path>
的提交. (此行为在--full-diff
的段落中进行了描述,这会导致显示每个提交的完整差异。) -
-m
导致 merge 提交包含差异内容(否则这些仅显示提交消息,就好像未指定-p
一样)。 -
-1
仅显示对指定文件的最新更改(可以使用-n 1
代替-1
);否则,将显示该文件的所有 非零差异。 -
--follow
需要查看重命名之前发生的更改。
据我所知,这是在不使用 git log
的情况下立即查看对文件所做的最后一组更改的唯一方法。 (或类似)计算中间修订的数量或确定提交的哈希值。
要查看较旧的修订更改,只需滚动日志,或指定从中开始日志的提交或标记。 (当然,指定提交或标记会使您回到最初的问题,即找出正确的提交或标记是什么。)
信用到期的信用:
- 我发现了
log -p
感谢this answer . - 感谢 FranciscoPuga 和 this answer给我看
--follow
选项。 - 感谢 ChrisBetti 提到
-n 1
提到-1
的选项和 atatko变体。 - 感谢 sweaver2112 让我真正阅读文档并弄清楚是什么
-p
在语义上“意味着”。 - 感谢 Oscar Scholten 指出默认情况下,
-p
不显示 merge 提交的差异内容。
关于git diff 文件与其上次更改的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176601/