当头部处于特定提交时,我希望获得一个差异文件,以便将头部降低一个级别,然后尝试在应用和未应用差异文件的情况下测试功能。因此,有没有一种方法可以生成特定提交的差异文件。
虽然有一种方法可以在提交之前和之后更改头部,但这种方法更方便。
查看特定提交的更改:
git diff <commit-sha> -p
或者,
git show --decorate <commit-sha> # See 'Author', 'Date' and 'diff'
查看两次提交之间的差异:
git diff <commit1> <commit2>
查看特定提交的文件
更改:
git show <commit>:<file>
查看一段时间内(比如,1天)的所有更改:
git whatchanged --since="1 day ago" -p
git whatchanged --since="1 day ago" -p <file> # See changes for a specific file only
git diff <commit-sha> -p
给我的结果和没有加上 -p
是完全一样的。也就是说,它显示了在该提交之后和当前工作目录之间的差异。 - undefined如果我理解正确的话,您想要获取一个与HEAD下一级不同的文件。
要检查文件差异,从当前HEAD到之前一个级别:
git diff HEAD^1 filename
数字1代表你希望进行比较的级别。
您还可以使用SHA-1哈希来获取不同之处。要查看所有提交及其SHA-1,请使用:
git log --oneline
然后你可以使用SHA-1哈希来获取差异,用于将当前的HEAD与特定提交进行比较。使用:
git diff commitSHA filename
如果你想获取两个提交之间的所有差异,可以使用:
git diff commitSHA1..commitSHA2 filename
来自 gitrevisions(7)
:
r1^! 表示包含提交 r1,但排除了其所有父提交。单独使用此符号表示单个提交 r1。
这适用于显示单个提交的差异。例如,您可以执行以下操作:
git log --oneline | grep thingamabob
git diff 'b7f57543^!'
r1^!
表示包括提交 r1 但不包括其所有父提交。难道这不应该是“不包括所有子提交”吗?当我执行 git diff <commit>
时,我看到的是来自 <commit>
和它的所有子提交(而不是父提交)的更改。因此,似乎所讨论的符号排除了其子提交的更改。 - Patrickcommit1
是您想要生成差异的提交:git diff <commit-before-commit1> <commit1> > commit1.diff
git diff <commit-sha> -p
命令查看提交的更改。 - Sajib Khangit diff commit1 commit2
。你也可以将任意两个提交的git diff
输出限制为指定的文件:例如git diff c1 c2 -- path1 path2
。 - torek