如何将文件(例如
pom.xml
)从 master 分支与 Git 中的任意旧版本进行比较?
你可以这样做:
git diff master~20:pom.xml pom.xml
...将您当前的
pom.xml
与第一个父级 20 次修订前的 master
进行比较。 当然,您可以将 master~20
替换为提交的对象名称 (SHA1sum) 或任何指定修订版的许多其他方法。
请注意,这实际上是将旧的
pom.xml
与工作树中的版本进行比较,而不是在 master
中提交的版本。 如果您想要这样,那么您可以执行以下操作:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
例如:
git diff b0d14a4 foobar.txt
如果您想查看单个文件的最后一次提交之间的差异,您可以执行以下操作:
git log -p -1 filename
这将为您提供 git 中文件的差异,而不是比较您的本地文件。
要查看上次提交中文件中的更改内容:
git diff HEAD~1 -- path/to/file
您可以将数字 (~1) 更改为您想要比较的第 n 个提交。
git diff -w HEAD origin/master path/to/file
-w 忽略空格
通用语法:
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
对于存储库中任何位置名为“FileName.xml”的所有文件。
注意“--”和“**”之间的空格
回答您的问题:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
与 git 一样,您可以使用 tag/sha1/"HEAD^" 来标识提交。
在 Ubuntu 上使用 git 1.9.1 进行测试。
如果两个提交都不是您的 HEAD,那么 bash 的 brace 扩展 证明非常有用,特别是如果您的文件名很长,如上面的示例:
git diff master~20:pom.xml master:pom.xml
会成为
git diff {master~20,master}:pom.xml
更多关于 bash 的大括号扩展。
为了与当前的 5 次提交进行比较,都在
master
上,只需简单地执行:
git diff master~5:pom.xml master:pom.xml
你也可以参考commit hash number,例如如果hash number是
x110bd64
,你可以这样做来看看差异:
git diff x110bd64 pom.xml
git diff master~20 -- pom.xml
如果您不在主分支中也可以工作。
如果您可以使用图形工具(甚至更喜欢它),您可以:
gitk pom.xml
在 gitk 中,您可以单击任何提交(以“选择”它),然后右键单击任何其他提交以在弹出菜单中选择“Diff this -> selected”或“Diff selected -> this”,具体取决于您喜欢的顺序.
对于有兴趣在 GitHub 上执行相同操作的人,请参阅比较不同时间的提交。
如果您需要对存储中的单个文件进行比较,例如您可以这样做
git diff stash@{0} -- path/to/file
假设您想要比较位于
interrupt.c
的文件
firmware/src/
git difftool头固件/src/interrupt.c
或
git difftool 头 *interrupt.c
注意:要在最后提交的版本之前比较 x 版本,请将“head”替换为 head~x。例如,将“head”替换为“head~2”,以区分工作区域和最新提交之前的 2 个版本
首先使用下一行获取要比较的版本的 id
git log --oneline
您将获得所有已提交版本的列表。选择两个并复制他们的 ID。
在里面输入id
{}
:
git difftool {2fae9e6,a21dd00} 固件/src/interrupt.c
或
git difftool {2fae9e6,a21dd00} *中断.c
注意:如果文件之间没有差异,则不会打开任何内容。你只会在 git bash 中得到一个空行
如果您正在寻找特定提交的差异,并且想要使用 github UI 而不是命令行(假设您想将其链接到其他人),您可以这样做:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
例如:
请注意右上角的“上一个”和“下一个”链接,可让您浏览提交中的所有文件。
这仅适用于特定提交,不适用于任意两个任意版本之间的比较。
检查特定目录中所有文件的差异,例如。
develop
分支和feature/my_feature
分支:
git checkout develop
git diff feature/my_feature: src/main/