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

Posted

技术标签:

【中文标题】查找当前版本和上一个版本之间的差异【英文标题】:Finding diff between current and last version 【发布时间】:2012-04-11 19:27:47 【问题描述】:

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

git diff last version:HEAD

【问题讨论】:

如果您使用 GitHub 作为存储库的云位置,这非常简单:导航到您的项目并单击显示您的项目的表格中的标题“commits” 真正应该在问题中澄清“当前和最新版本”的含义。 【参考方案1】:

假设“当前版本”是工作目录(未提交的修改),“最后一个版本”是HEAD(当前分支的最后提交修改),只需这样做

git diff HEAD

以下内容归功于用户 Cerran

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

总结

    git diff 显示未分阶段的更改。 git diff --cached 显示阶段性更改。 git diff HEAD 显示所有更改(分阶段和未分阶段)。

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

【讨论】:

如果你在提交时总是用-a跳过暂存区,那么你可以简单地使用git diffgit diff 显示 unstaged 更改。 git diff --cached 显示分阶段的变化。 git diff HEAD 显示所有 更改(分阶段和未分阶段)。来源:git-diff(1) Manual Page git中“当前未暂存版本”的名称是什么?真的有名字吗?【参考方案2】:

我不太明白“最新版本”的含义。

由于可以使用 HEAD^ 访问上一个提交,我认为您正在寻找类似的内容:

git diff HEAD^ HEAD

这也可以申请 :commithash

git diff $commithash^ $commithash

从 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 在 cmets 中解释说,在 Windows 上必须使用 ~ 字符而不是 ^

【讨论】:

我想要提交版本和之前的版本...git diff head head-1 从 Git 1.8.5 开始,@HEAD 的别名。而且由于~^ 在只返回一个提交时是相同的,我发现git diff @~..@ 更容易输入。 @Andrew git show 更容易,因为@~..@ 是默认显示的内容。 git show 的问题在于,如果HEAD 是一个合并提交,您将不会得到您期望的结果,因为合并提交本身可能没有任何更改。 git diff HEAD^ HEAD 将显示版本之间的实际变化 备注:对于 Windows 命令提示符,^ 是转义字符。可以输入^^ 来表示^【参考方案3】:

你也可以这样做:

与上一次提交比较

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

比较当前和之前的两次提交

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

【讨论】:

【参考方案4】:

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

git diff --cached --color

【讨论】:

这正是我发现这个问题时所寻找的。谢谢!【参考方案5】:

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

git diff HEAD~

甚至(更容易输入)

git diff @~

其中@ 是当前分支的HEAD 的同义词,~ 表示“给我提到的修订版的父级”。

【讨论】:

我很喜欢git diff HEAD^(而不是等价的HEAD~形式)。对于像我这样的“老 git”来说,记住它要容易一些 ;-) 胡萝卜在某些终端中是个问题。很高兴有这个选项 可以通过解释~@ 的含义来改进答案。 如果我们只想检查上次提交中提交的内容,请不要使用它(因为脏更改会影响差异)。真正diff HEAD^ HEAD 的较短语法应该是git diff @^!。对于r1^!,请参阅git-scm.com/docs/gitrevisions @JohnnyWong 谢谢你的澄清。我提到“当前状态”是为了不让读者感到困惑。【参考方案6】:

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

git show

【讨论】:

使用git show HEAD~1 显示最后一个提交,使用git show HEAD~2 等显示较旧的提交。通过git show HEAD~2 my_file 仅显示一个文件。【参考方案7】:

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

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

接下来,使用:

git diff <commit_id1> <commit_id2>

git difftool <commit_id1> <commit_id2>

【讨论】:

【参考方案8】:

快速简单,假设你是大师:

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

例子:

    git diff asdfioei91819280din198:file.txt file.txt

【讨论】:

请注意,在 (checkout_id): 之后,您需要从 repo 的根目录到文件名的相对路径。对我来说,我从文件所在的目录尝试了上述操作,但失败了,直到我将其更改为 git diff 3d44feb544150cf35b2a99d5917e294e10596f8e:./file.txt file.txt 此外,OP 的初衷尚不清楚,但如果您想要“当前版本和上一个版本之间的差异”的文件。我最初尝试过git diff HEAD~1 -- file.txt,但没有成功,因为对该文件的最后一次更改是在 10 次提交之前。【参考方案9】:

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

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

菜单项目资源管理器 → 文件 → 右键单击​​ → 团队在历史中显示

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

【讨论】:

【参考方案10】:

这也适用于标签(如果您需要查看所有更改,请删除下面的“uniq”和其他部分):

 git diff v1.58 HEAD 

以下内容相同,这可能对 continuous integration (CI) 用于单体存储库中的微服务有用:

git diff v1.58 HEAD  --name-only | sort -u | awk 'BEGIN FS="/" print $1' | uniq
<Folder Name> 

(信用 - https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo)

【讨论】:

【参考方案11】:

如果 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

等等……

【讨论】:

【参考方案12】:

在提交中显示个人更改,指向头部。

git show Head~0

在提交中显示累积的更改,指向头部。

git diff Head~0

其中 0 是所需的提交次数。

【讨论】:

【参考方案13】:

如果最新版本表示最后一个标签,当前版本表示HEAD(当前状态),它只是与最后一个标签的差异:

寻找tags:

$ git tag --list
...
v20.11.23.4
v20.11.25.1
v20.11.25.2
v20.11.25.351

最后一个标签是:

$ git tag --list | tail -n 1
v20.11.25.351

把它放在一起:

tag=$(git tag --list | tail -n 1)
git diff $tag

【讨论】:

【参考方案14】:

如果您想要最后一次n 提交的更改,您可以使用以下内容:

git diff HEAD~n

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

git diff HEAD~5

【讨论】:

以上是关于查找当前版本和上一个版本之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

在每个当前行和上一行 BigQuery 之间查找 MAX、AVG

SQL查找上一行和当前行之间的差异

Paper_Trail:显示版本之间的差异

当前行和上一行之间的秒数差异,并使用 google bigquery 将值存储在单独的列中

当前行和上一行之间的秒数差异,并在订单 ID 也使用 google bigquery 匹配时将值存储在单独的列中

开发版本和生产版本之间的 Sencha Touch 高度差异