活动
查看历史记录
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Git 使用提交元数据(如父链接、作者详细信息和时间戳)来跟踪存储库中的更改历史记录。 可以查看 Git 历史记录,以查明文件的更改时间、更改人员和更改内容。
当用户使用拉取请求创建功能分支并将其合并到目标分支时,目标分支的开发历史记录可能无法按时间顺序排列为直线。 因此,在查看目标分支上文件的更改历史记录时,请记住,提交顺序受合并策略和合并日期的影响,而不仅仅是更改的原始日期。 例如,main
分支上的最新提交可能会引入数周前在功能分支中进行的更改,该分支刚刚使用三向合并合并到 main
分支中。
本文介绍如何执行以下操作:
- 比较文件版本
- 还原文件
- 比较分支
要了解如何配合使用 Visual Studio 2022 与 Git,请参阅 Visual Studio 如何使用 Git 简化版本控制。
如果要弄清楚特定文件更改的发生方式和时间,可能需要比较不同提交(可能在不同的分支中)中同一文件的不同版本。
git diff 命令可以比较不同分支的不同提交中同一文件的不同版本。 git log 命令可帮助识别包含要比较的文件版本的提交。
使用
git log
并指定一个文件,以列出更改了该文件的提交:控制台git log <file>
默认情况下,命令输出从当前分支中的最新提交开始,然后通过访问每个提交元数据中的父链接向后循环访问上级提交(无论分支如何)。
下面是
git log index.html
命令的输出示例:输出commit bbc3b679197b659544a6f8070c79fb535b496613 Date: Thu Jun 30 13:42:50 2021 -0400 update landing page commit e5402fe710c25eca1b96a4e238eee9c01ed41c6a Date: Thu Jun 30 13:42:23 2021 -0400 initial commit
使用
git diff
并指定一个文件和两个提交,以查看提交的文件版本有何不同:控制台git diff <commit1> <commit2> <file>
下面是
git diff bbc3b67 e5402fe index.html
命令的输出示例:输出- <link rel="stylesheet" href="app.cs"/> + <link rel="stylesheet" href="fabrikam.cs"/>
输出显示删除了一行,并添加了一行。
要限制] git log
列出的提交,可以按作者、日期、消息、和更改的内容等进行筛选。 例如:
git log --author=frank@fabrikam.com index.html
仅列出指定作者的提交。git log --since="2022-5-1"
仅列出在指定日期之后创建的提交。git log --before="yesterday"
仅列出在指定的相对日期之前创建的提交。git log --grep="css change"
仅列出其消息中具有指定文本的提交。git log -S"myVariable"
仅列出引入或移除指定字符串的提交。git log -G"myVar.*"
仅列出引入或移除指定正则表达式字符串的提交。git log -3
仅列出最后三个提交。
提交列表有多个格式选项。 例如:
git log --abbrev-commit
使用缩写 ID(SHA-1 校验和)列出提交。git log --oneline
以单行缩写格式列出每个提交。git log --patch index.html
一起列出每个提交以及更改的差异。
可以从 Git 历史记录还原文件的特定版本,即使在之后的提交中对该文件进行了编辑、删除或重命名。 还原较旧版本的文件不会创建包含更改的新提交。 要使用还原的文件版本更新分支,需要提交更改。
可以使用 git checkout 或 git show 命令从 Git 历史记录还原特定版本的文件。
如果指定了文件和提交,git checkout 会将文件还原为之前提交的版本:
控制台git checkout <commit> <file>
例如,
git checkout 85435fac src/app.ts
将src/app.ts
文件还原为其在提交85435fac
中的版本。git show 输出之前提交的文件版本的内容,可以将其重定向到输出文件:
控制台git show <commit>:<file> > <output file>
例如,
git show 85435fac:src/app.ts > /archive/oldapp.ts
将提交85435fac
中app.ts
的内容写入/archive/oldapp.ts
。
可以比较任何本地或远程分支,以查看合并或变基所导致的更改。 通过分支比较,可检查合并冲突,并查看其他人的更改对你的工作有何影响。
Visual Studio 2019 及更早版本不支持分支比较,因此,如果使用其中某个版本,并且存储库托管在 Azure Repos 或 GitHub 中,则可以使用 Git 命令行或 Web 浏览器比较分支。 Visual Studio 2022 支持分支比较,如比较分支中所述。
要比较任何两个本地或远程分支,可以使用 Git diff
命令指定分支名称:
git diff <branch1> <branch2>
Git 将一个分支顶端的提交与另一个分支顶端的提交进行比较。 差异输出显示两个分支中每个文件之间的删除内容和添加内容。
下面是命令 git diff users/frank/feature origin/main
的输出示例,该命令将本地分支与远程分支进行比较:
index 36843b8..03afc4b 100644
--- a/tsapp/index.html
+++ b/tsapp/index.html
@@ -4,7 +4,7 @@
<head>
<meta charset="utf-8" />
<title>TypeScript HTML App</title>
- <link rel="stylesheet" href="fabrikam-test.css" type="text/css" />
+ <link rel="stylesheet" href="fabrikam.css" type="text/css" />
<script src="app.js"></script>
</head>
...
--- a/tsapp/app.ts
+++ b/tsapp/app.ts
constructor(element: HTMLElement) {
this.element = element;
- this.element.innerHTML += "The time is: ";
+ this.element.innerHTML += "The time is now: ";
this.span = document.createElement('span');
this.element.appendChild(this.span);
this.span.innerText = new Date().toUTCString();
要缩小与特定文件的比较范围,请在 diff
命令中指定文件:
git diff <branch1> <branch2> <file>
例如,git diff users/frank/feature origin/main index.html
仅针对 index.html
文件生成差异。
其他资源
培训
文档
-
在 Visual Studio 中查看 Git 提交历史记录
-
在 Visual Studio 中查看 Git 提交详细信息
-
了解在 Azure Repos Git 存储库中工作时的拉取请求准则、管理和注意事项。