查找当前版本和最后版本之间的差异?

Raj*_*eev 631 git

使用Git,您如何找到当前版本和最后一个版本之间的差异?

git diff last version:HEAD
Run Code Online (Sandbox Code Playgroud)

Fra*_*uga 1098

我真的不明白"最后一个版本"的含义.

由于可以使用HEAD ^访问先前的提交,我认为您正在寻找类似的东西:

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

从Git 1.8.5开始,@是别名HEAD,所以你可以使用:

git diff @~..@
Run Code Online (Sandbox Code Playgroud)

以下内容也适用:

git show
Run Code Online (Sandbox Code Playgroud)

如果你想知道head和任何提交之间的差异你可以使用:

git diff commit_id HEAD
Run Code Online (Sandbox Code Playgroud)

这将启动您的可视化差异工具(如果已配置):

git difftool HEAD^ HEAD
Run Code Online (Sandbox Code Playgroud)

由于与HEAD的比较是默认的,你可以省略它(如Orient所指出的):

git diff @^
git diff HEAD^
git diff commit_id
Run Code Online (Sandbox Code Playgroud)

警告

  • @ScottF和@Panzercrisis在评论中解释说,在Windows上~必须使用该字符代替^.

  • @Andrew`git show`更容易,因为`@〜.. @`是默认的东西. (77认同)
  • 从Git 1.8.5开始,`@`是`HEAD`的别名.因为`~`和`^`在只返回一个提交时是相同的,所以我发现`git diff @〜.. @`更容易输入. (6认同)
  • `git show` 的问题在于,如果 `HEAD` 是一个合并提交,你将不会得到你期望的结果,因为合并提交本身可能没有任何更改。`git diff HEAD^ HEAD` 将显示版本之间的实际变化 (4认同)
  • 备注:对于 Windows 命令提示符,“^”是转义字符。可以输入“^^”来表示“^” (3认同)
  • git show仅打印提交消息,至少在Git 2.5.4(Apple Git-61)中它不会输出特定更改的差异,因此它实际上不是对OP问题的答案。 (2认同)

Cha*_*esB 149

假设"当前版本"是工作目录(未提交的修改),"最后版本"是HEAD(当前分支的最后提交修改),只需执行

git diff HEAD
Run Code Online (Sandbox Code Playgroud)

以下信用转到用户 Cerran

如果您-a在提交时总是跳过暂存区域,那么您可以简单地使用git diff.

摘要

  1. git diff 显示未分级的更改.
  2. git diff --cached 显示分阶段的变化.
  3. git diff HEAD 显示所有更改(分阶段和非分阶段).

来源:git-diff(1)手册页 - Cerran

  • 如果你在提交时总是跳过带有-a`的暂存区域,那么你可以简单地使用`git diff`.<1>**`git diff`**显示**未经分级的**变化.<2>**`git diff --cached`**显示**上演**变化.<3>**`git diff HEAD`**显示**所有**变化(分阶段和非分阶段).资料来源:[git-diff(1)手册页](http://git-scm.com/docs/git-diff) (16认同)

Nig*_*hto 111

正如amalloy评论所指出的那样,如果用"当前版本和最后版本"表示最后一次提交和之前的提交,你可以简单地使用

git show
Run Code Online (Sandbox Code Playgroud)

  • 使用`git show HEAD~1`来显示最后一个提交,以及`git show HEAD~2`等用于旧提交.通过`git show HEAD~2 my_file`显示一个文件. (11认同)
  • 这就是我想要的.很好的答案. (5认同)
  • 简单.这应该是公认的答案. (5认同)

Ori*_*ent 57

最后一次提交和最后一次提交之间的区别(加上当前状态,如果有的话):

git diff HEAD~
Run Code Online (Sandbox Code Playgroud)

甚至(更容易打字)

git diff @~
Run Code Online (Sandbox Code Playgroud)

当前分支@的synonim 在哪里HEAD,~意思是"给我提到的修改的父母".

  • 胡萝卜是一些终端的问题.很高兴有选择权 (3认同)

nao*_*oko 51

你也可以这样做:

与之前的提交相比

git diff --name-status HEAD~1..HEAD
Run Code Online (Sandbox Code Playgroud)

与当前和之前的两个提交进行比较

git diff --name-status HEAD~2..HEAD
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 15

cached如果您添加了,但只是尚未提交,请使用该标志:

git diff --cached --color
Run Code Online (Sandbox Code Playgroud)


Vas*_*h K 9

如果您想要上次提交的更改n,可以使用以下命令:

git diff HEAD~n

因此,对于当前提交的最后 5 次提交(包括当前提交),它将是:

git diff HEAD~5


par*_*ish 8

首先,使用“ git log”列出存储库的日志。

现在,选择与两个提交相关的两个提交 ID。您想查看差异(例如 - 最重要的提交和一些较旧的提交(根据您对当前版本和一些旧版本的期望))。

接下来,使用:

git diff <commit_id1> <commit_id2>
Run Code Online (Sandbox Code Playgroud)

或者

git difftool <commit_id1> <commit_id2>
Run Code Online (Sandbox Code Playgroud)


Bry*_*yan 7

快速而简单,假设你在主人:

    git diff (checkout_id):file.txt file.txt
Run Code Online (Sandbox Code Playgroud)

例:

    git diff asdfioei91819280din198:file.txt file.txt
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在“(checkout_id):”之后,您需要从存储库根目录到文件名的相对路径。对我来说,我从文件所在的目录尝试了上述操作,但失败了,直到我将其更改为 `git diff 3d44feb544150cf35b2a99d5917e294e10596f8e:./file.txt file.txt` 另外,OP的初衷尚不清楚,但这个答案如果您想要文件的“当前版本和上一个版本之间的差异”,这是唯一可以解决的问题。我最初尝试了 `git diff HEAD~1 -- file.txt` 但它不起作用,因为对该文件的最后一次更改是在 10 次提交之前。 (2认同)

bit*_*007 6

如果 HEAD 指向顶部提交,那么您可以执行以下操作:

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2
Run Code Online (Sandbox Code Playgroud)

第一次和第二次提交之间的差异:

git diff HEAD~1 HEAD
Run Code Online (Sandbox Code Playgroud)

第一次和第三次提交之间的差异:

git diff HEAD~2 HEAD
Run Code Online (Sandbox Code Playgroud)

第二次和第三次提交之间的差异:

git diff HEAD~2 HEAD~1
Run Code Online (Sandbox Code Playgroud)

等等...