“git diff 文件”与上次更改

问题描述 投票:0回答:3

是否可以让 Git 在当前存在的特定文件与上次更改它之前存在的文件之间生成差异?

也就是说,如果我们知道:

git log --oneline myfile

输出:

123abc Fix some stuff
456def Frobble the foos
789dba Initial commit

然后

git diff 456def myfile
显示对我的文件的最后更改。如果没有
git log
产生的知识,也可以做同样的事情; 123abc 发生了什么变化?

git git-diff
3个回答
274
投票

这个确实存在,但它实际上是

git log
的一个功能:

git log -p [-m] [--follow] [-1] <path>

请注意,

-p
也可用于显示单个提交的内联差异:

git log -p -1 <commit>

使用的选项:

  • -p
    (也称为
    -u
    --patch
    )隐藏在
    git-log
    手册页中,实际上是
    git-diff
    的显示选项。当与
    log
    一起使用时,它会显示将为每个提交生成的补丁,以及提交信息,并且 隐藏 不触及指定 <path>
     的提交。 (此行为在 
    --full-diff
     的段落中进行了描述,这会导致显示每个提交的完整差异。)
  • -m
     导致合并提交包含差异内容(否则这些仅显示提交消息,就好像未指定 
    -p
     一样)。
  • -1
    显示
    指定文件的最新更改(可以使用-n 1
    代替
    -1
    );否则,将显示该文件的
    所有非零差异。 需要
  • --follow
    才能查看重命名之前发生的更改。
据我所知,这是立即查看对文件所做的最后一组更改的唯一方法,而无需使用

git log

 (或类似的)来计算干预修订的数量或确定提交的哈希值。 

要查看旧版本的更改,只需滚动日志,或指定从中启动日志的提交或标签。 (当然,指定提交或标签会让您回到最初的问题,即找出正确的提交或标签是什么。)

信用到期的信用:

    我发现
  • log -p
    感谢
    这个答案
  • 感谢FranciscoPuga和
  • 这个答案向我展示了--follow
    选项。
  • 感谢 ChrisBetti 提到了
  • -n 1
     选项,感谢 atatko 提到了 
    -1
     变体。
  • 感谢 sweaver2112 让我真正阅读文档并弄清楚
  • -p
     在语义上的“含义”。
  • 感谢 Oscar Scholten 指出,默认情况下,
  • -p
     不显示合并提交的差异内容。

237
投票
使用 git diff 的方法之一是:

git diff <commit> <path>

引用最后一次提交的一个常见方法是作为实际 HEAD 的相对路径。您可以将以前的提交引用为 HEAD^ (在您的示例中为 123abc)或 HEAD^^ (在您的示例中为 456def)等...

所以你的问题的答案是:

git diff HEAD^^ myfile
    

9
投票
如果您可以使用图形工具,那么这会非常有效:

gitk <file>

gitk 现在显示文件已更新的所有提交。标记提交将向您显示与列表中先前提交的差异。这也适用于目录,但是您还可以选择要为所选提交进行比较的文件。超级有用!

© www.soinside.com 2019 - 2024. All rights reserved.