使用Git,您如何发现当前版本和上一版本之间的差异?

git diff last version:HEAD

假设“当前版本”是工作目录(未提交修改),“最后版本”是HEAD(当前分支的最后提交修改)

git diff HEAD

以下内容归功于用户Cerran。

如果在提交时总是使用-a跳过临时区域,那么可以简单地使用gitdiff。

总结

gitdiff显示未分页的更改。gitdiff——缓存显示分段更改。git diff HEAD显示所有更改(暂存和未暂存)。

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


我不太理解“最后版本”的含义。

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

git diff HEAD^ HEAD

这也适用于:commithash

git diff $commithash^ $commithash

从Git1.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 --name-status HEAD~1..HEAD

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

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

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

git diff --cached --color

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

git diff HEAD~

甚至(更容易打字)

git diff @~

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


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

git show

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

现在,选择与两个提交相关的两个提交ID。您希望看到不同之处(例如,最顶级的提交和一些较旧的提交(根据您对当前版本和一些旧版本的期望))。

接下来,使用:

git diff <commit_id1> <commit_id2>

or

git difftool <commit_id1> <commit_id2>

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

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

例子:

    git diff asdfioei91819280din198:file.txt file.txt

我在安装了EclipseEGit插件的EclipseIDE中使用Bitbucket。

我将文件与任何版本的历史记录(如SVN)进行比较。

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

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


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

 git diff v1.58 HEAD 

下面是相同的,这对于单片存储库中的微服务的持续集成(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)


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

等等


以显示提交中的个别更改。

git show Head~0

显示提交中累积的更改。

git diff Head~0

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


如果上一个版本意味着最后一个标签,而当前版本意味着HEAD(当前状态),那么这只是与上一个标签的区别:

正在查找标记:

$ 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

如果希望对最后n次提交进行更改,可以使用以下选项:

git diff HEAD~n

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

git diff HEAD~5