在git中生成特定提交的diff文件

Gin*_*cob 12 git git-diff

当头部处于特定提交时,我想获得一个diff文件,这样我就可以将头部缩小到一个更低的水平,然后在应用和不应用diff文件的情况下尝试测试功能.那么有没有办法生成特定提交的diff文件.

尽管有一种方法可以在提交之前和之后更改头部,但这种方法更方便.

Saj*_*han 12

查看特定提交的更改.

$ git diff <commit-sha> -p

OR,
$ git show --decorate <commit-sha>    # see 'Author', 'Date' and 'diff'
Run Code Online (Sandbox Code Playgroud)

查看两个提交的差异.

$ git diff <commit1> <commit2>
Run Code Online (Sandbox Code Playgroud)

查看file特定提交的更改.

$ git show <commit>:<file>
Run Code Online (Sandbox Code Playgroud)

查看持续时间的所有更改(例如1 day).

$ git whatchanged --since="1 day ago" -p
$ git whatchanged --since="1 day ago" -p <file>   # see changes for a specific file only
Run Code Online (Sandbox Code Playgroud)

  • `git diff &lt;commit-sha&gt; -p` 给我的结果与没有 `-p` 时完全相同。即提交后和当前工作目录之间的差异。 (2认同)

Raf*_*ver 12

gitrevisions(7)

r1^! 表示法包括提交 r1 但不包括其所有父项。该符号本身表示单个提交 r1。

这可以显示单个提交的差异。例如,你可以这样做:

git log --oneline | grep thingamabob
Run Code Online (Sandbox Code Playgroud)

这将为您提供短 SHA-1 哈希值,这样您就可以看到该提交的差异:

git diff 'b7f57543^!'
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这是最有用的答案,因为它不需要您寻找 2 个哈希值或记住 1 个以上哈希值。 (3认同)

Oce*_*vez 6

如果我正确理解您的要求,那么您想获得一个低于HEAD级别的文件的差异

检查文件从当前HEAD到上一级之前的差异

git diff HEAD^1 filename
Run Code Online (Sandbox Code Playgroud)

数字1是您要比较的级别,

您也可以使用SHA获得差异,以查看其SHA使用的所有提交

git log --oneline
Run Code Online (Sandbox Code Playgroud)

然后您可以使用SHA获取差异,以比较当前HEAD与特定提交的使用情况

git diff commitSHA filename
Run Code Online (Sandbox Code Playgroud)

如果您想获得两次提交之间的所有差异,可以使用

git diff commitSHA1..commitSHA2 filename
Run Code Online (Sandbox Code Playgroud)