git diff 文件与其上次更改的对比

标签 git git-diff

是否有可能让 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/

相关文章:

git - git 保存了多少/多长时间的存储?

git - git clone 是否通过 NTLM 代理工作?

python - 集成pylint和github评论评论

git - 列出更改 (diff) 包含给定字符串的文件?

git - `git config interactive.diffFilter diff-highlight` : the same diff by lines - and without color

Git 将文件标记为二进制文件以避免行分隔符转换

git - 采用 git diff 并在不同的 repo 中创建一个新分支

git - 在Git中,如何列出分支A中存在但分支B中不存在的所有文件

git - 使 git diff --stat 显示完整文件路径

git - 从 Git 中的多个提交中导出修改后的文件