git的diff文件对最后的变化
是否有可能得到一个特定的文件之间的差异,因为它现在存在,因为它存在之前最后一次提交改变了它?
也就是说,如果我们知道:
$ git log --oneline myfile 123abc Fix some stuff 456def Frobble the foos 789dba Initial commit
然后git diff 456def myfile
显示git diff 456def myfile
的最后更改。 如果没有git log
产生的知识,是可以做到的; 123abc中改变了什么?
这确实存在,但它实际上是一个git log
的function:
git log -p [--follow] [-1] <path>
请注意, -p
也可以用来显示单个提交的内联差异:
git log -p -1 <commit>
使用的选项:
-
-p
(也是-u
或--patch
)在git-log
手册页中隐藏了deeeeeeeep,实际上是git-diff
的显示选项。 与log
使用时,它实际上会显示每个提交会生成的补丁以及提交信息,并隐藏不会触及指定的<path>
提交。 (这个行为在--full-diff
的段落中描述,这会导致显示每个提交的完全差异。) -
-1
显示了对指定文件的最近更改(-n 1
可以用来代替-1
); 否则,显示该文件的所有非零差异。 -
--follow
需要--follow
以查看重命名之前发生的更改。
据我所知,这是立即看到不使用git log
(或类似)来计算中间修订数量或确定提交散列的最后一组文件更改的唯一方法。
要查看较早的修订版本更改,只需滚动浏览日志,或者指定从中启动日志的提交或标记。 (当然,指定一个提交或标记可以让你回到原来的问题,找出正确的提交或标记是什么。)
信贷到期的信用:
- 我发现
log -p
感谢这个答案 。 - 感谢FranciscoPuga和这个答案给我看 –
--follow
选项。 - 感谢ChrisBetti提及
-n 1
选项和atatko提到-1
变体。 - 感谢sweaver2112让我真正阅读文档,并找出什么
-p
“意味着”的语义。
使用git diff的方法之一是:
git diff <commit> <path>
最后提交的一个提交的常用方法是作为实际HEAD的相对path。 你可以引用前面的提交HEAD ^(在你的例子中这将是123abc)或HEAD ^^(456def在你的例子中),等等…
所以你的问题的答案是:
git diff HEAD^^ myfile
如果你使用graphics工具很好,这很好:
gitk <file>
gitk现在显示文件已被更新的所有提交。 标记提交会显示与列表中前一个提交的差异。 这也适用于目录,但是你也可以select文件来区分选定的提交。 超级有用!