查找当前版本与上一版本之间的差异


670

使用Git,如何找到当前版本与最新版本之间的差异?

git diff last version:HEAD

1
如果您使用GitHub作为仓库的云位置,则非常简单:导航至您的项目,然后在显示项目的表格中单击“提交”标题
David Lundquist

1
问题中确实应该弄清楚“当前和最新版本”的含义。
faintsignal

Answers:


1170

我不太了解“最新版本”的含义。

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

git diff HEAD^ HEAD

从Git 1.8.5开始,它@是的别名HEAD,因此您可以使用:

git diff @~..@

以下内容也将起作用:

git show

如果您想知道head和任何提交之间的区别,可以使用:

git diff commit_id HEAD

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

git difftool HEAD^ HEAD

由于与HEAD的比较是默认设置,因此您可以忽略它(如Orient所指出的):

git diff @^
git diff HEAD^
git diff commit_id

警告事项

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

我想要类似提交的版本和之前的版本... git diff head head-1
Rajeev 2012年

7
从Git 1.8.5开始,@是的别名HEAD。而且由于~^相同,当只回退一次提交时,我发现git diff @~..@键入起来容易得多。
安德鲁(Andrew)

80
@Andrew git show仍然更容易,因为这@~..@是默认显示的内容。
amalloy 2014年

3
git show仅打印提交消息,至少在Git 2.5.4(Apple Git-61)中不会输出特定更改的差异,因此,实际上这并不是对OP问题的答案。
user1944491

1
问题git show在于,如果HEAD是合并提交,您将无法获得预期的结果,因为合并提交本身可能没有任何更改。git diff HEAD^ HEAD将显示版本之间的实际更改
RubenLaguna

158

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

git diff HEAD

以下内容归功于user Cerran

而且,如果您-a在提交时总是跳过暂存区域,则只需使用即可git diff

摘要

  1. git diff 显示未分阶段的更改。
  2. git diff --cached 显示分阶段的更改。
  3. git diff HEAD 显示所有更改(已分阶段和未分阶段)。

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


16
而且,如果您-a在提交时总是跳过暂存区域,则只需使用即可git diff。<1> git diff显示未执行的更改。<2> git diff --cached显示分阶段的更改。<3> git diff HEAD显示所有更改(已分阶段和未分阶段)。来源:git-diff(1)手册页
Cerran,2014年

1
这应该是可以接受的答案,因为它可以回答问题的意图。
tgoneil '18

git中“当前未暂存版本”的名称是什么?真的有名字吗?
Mathieu CAROFF

118

正如amalloy评论中指出的那样,如果“当前和最新版本”是指最后一次提交和在此之前的提交,则可以简单地使用

git show

5
这就是我想要的。好答案。
CodeManiak '16

12
使用git show HEAD~1显示最后却一犯,和git show HEAD~2等对老年人的提交。通过仅显示一个文件git show HEAD~2 my_file
Florian Brucker

60

最后一次提交与最后一次提交之间的差异(加上当前状态,如果有的话):

git diff HEAD~

甚至(更易于输入)

git diff @~

当前分支@的同义词在哪里HEAD~意思是“给我所述修订的父代”。


我很喜欢git diff HEAD^(而不是等效HEAD~形式)。对于像我这样的“老混蛋”,记住起来有点容易;-)
sxc731

3
胡萝卜在某些码头是个问题。很高兴可以选择
light24bulbs

1
解释“什么” ~和“ 什么@意思” 可以改善答案。
鲍勃·斯坦

1
如果我们只想检查上一次提交中提交的内容,请不要使用它(因为脏更改会影响diff)。实际上diff HEAD^ HEAD应该使用一个较短的语法git diff @^!。见git-scm.com/docs/gitrevisionsr1^!
约翰尼黄

@JohnnyWong谢谢您的澄清。我提到“当前状态”是为了不使读者感到困惑。
Tomilov Anatoliy

53

您也可以通过以下方式进行操作:

与上一次提交比较

git diff --name-status HEAD~1..HEAD

与当前和前两次提交进行比较

git diff --name-status HEAD~2..HEAD

16

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

git diff --cached --color

1
当我发现这个问题时,这正是我要寻找的。谢谢!
威廉·罗杰斯

7

快速而简单,假设您是高手:

    git diff (checkout_id):file.txt file.txt

例:

    git diff asdfioei91819280din198:file.txt file.txt

4

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

现在,选择与这两个提交有关的两个提交ID。您希望看到差异(例如 -最高的提交和一些较旧的提交(根据您对当前版本和某些旧版本的期望))。

接下来,使用:

git diff <commit_id1> <commit_id2>

要么

git difftool <commit_id1> <commit_id2>

3

如果HEAD指向最高提交,则可以执行以下操作:

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

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

git diff HEAD~1 HEAD

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

git diff HEAD~2 HEAD

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

git diff HEAD~2 HEAD~1

等等...


2

我将Bitbucket与安装了Eclipse EGit插件的Eclipse IDE配合使用。

我比较了文件历史记录的任何版本(例如SVN)。

菜单项目浏览器→ 文件 →右键单击→ 团队显示历史

这将带来该文件上所有更改的历史记录。现在Ctrl单击并选择任意两个版本→ “相互比较”


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.