git(6)查询git历史记录(二)

本文介绍了使用Git进行历史记录查询的方法,包括版本差异对比、代码变更统计、责任人追踪及内容移动跟踪等。此外,还详细讲解了如何撤销修改、反转提交和版本库复位等高级操作。
 

git(6)查询git历史记录(二)

Posted by 姜立 on 2011 年 10 月 03 日 in  Git |

1.查看版本之间的差异

使用命令git diff可以查看版本之间的差异。还是接着上篇文章中的例子来说明

git diff 18f822e

image

这个显示的是18f822e这个版本与当前工作目录树间的差异。

 

在命令git diff里,指定版本范围的方法与git log一样,唯一的差别是git diff输出的是最老版本与最新版本之间的差异,而不是按提交条目一个一个的显示。

在git diff命令中使用标签作为参数,是一种获取发布版本之间代码量统计的好方法,可以利用它计算出修改和删除的代码行数。

使用参数–stat,可以得到变更统计数据:

git diff –stat   1.0

image

这个例子命令git diff只传送了一个标签做参数,如果省略第二个参数,则git把HEAD当作默认值。

2.查明该向谁问责

git blame可以用来查看特定代码块的历史信息,该命令的输出结果代码块中的每行代码前附加前缀信息,其中包括提交名称,提交人和提交时间。

git blame hello.html

image

输出结果每行前8为字符是提交的哈希值,注意第一行有个脱字号,表示版本库中第一个提交。其次列出的是文件名index.html。因为hello.html原名是index.html,输出结果的第二列显示的是当初提交该行时的文件名,紧随其后显示的是提交人的姓名,提交时间,行号,以及该代码行。

git中通过给命令git blame传递参数-L能够缩小范围,它通过指定范围来告诉git只显示某些特定行的注释,此范围用参数“<开始>,<结束>”表示。

“<开始>,<结束>”参数可以是数字,例如显示文件hello.html的12和13行日志:

git blame –L 12,13 hello.html

image

<结束>这个参数不必非得指定数字,可以使用+N或者-N指定范围,使用这种方式生成的结果和前面例子中的结果完全相同:

git blame –L 12,+2 hello.html

image

使用-N记号可以减N行。

git还提供了另外一种指定<开始>和<结束>参数的方法:正则表达式。

git blame –L “/<\/body>/”,+2 hello.html

image

3.跟踪内容

git能够跟踪文件里甚至文件间的内容移动。

下面创建一个新的文件来演示这个功能。

创建一个名为original.txt文件,并添加一些内容。然后保存,添加并提交到版本库中:

git add original.txt

git commit –m “commit of original text file”

image

现在编辑这个文件,复制文件内容,然后将其粘帖在随后三行,然后保存,执行git diff将得到类似下面的输出结果:

image

提交修改到git版本库,现在可以使用git blame命令查看文件中每一行的历史提交记录:

git blame original.txt

image

从上图可以看出,输出结果的前三行的提交名称一样,后三行的提交名称一样,这就对应这目前位置的两次提交。

重新输入命令git blame,并加上参数-M。告诉git检测同一个文件内移动或复制的代码行:

git blame –M original.txt

image

结果显示所有提交名称相同,因为git跟踪的是内容,它在这里检测到了重复的内容。

git也可以跟踪文件之间的复制,下面复制文件original.txt到一个新文件,命令为copy.txt。

暂存并提交copy.txt,在命令git blame中添加参数-C -C来查看文件之间的复制:

git blame –C –C copy.txt

image

git不仅显示初始的提交名称ccdaace1,而且还有初始的文件名original.txt。给git log传递参数-C -C也能显示文件的复制信息。当用git log命令检测文件的复制时,还得传递参数-p,这样git出显示常规日志信息之外,还会显示代码的具体变动:

git log –C –C -p

image

到目前为止已介绍了查看历史记录的基本方法。下面介绍如何改写版本库历史。

4.撤销修改

4.1增补提交

为了演示,在文件contact.html中添加一个博客连接,但是故意把连接写错,然后提交本次修改:

git commit –m “add link to blog” -a

image

接下来修改该url后再次提交修改,并在git commit命令添加–amend参数:

git commit –C HEAD -a –amend

image

该命令使用的一个新参数-C,即告诉git复用指定提交留言,而不是从头再写一个。这个例子中指定的是HEAD。如果参数是小写-c就会打开预先设置好的编辑器,一边在已有提交留言基础上编辑修改。

git commit –c HEAD -a –amend

image

增补提交只能针对最后一个提交,如果想更正好几个提交之前的某个错误,则需使用git revert这个命令。

4.2反转提交

反转已经提交的改动,最简单的方法就是使用git revert命令,此命令通过在版本库中创建一个反向的新提交来抵消原来的提交改动。

参数git会立即提交反转结果,但是也可以通过-n参数告诉git先不要提交,这对于需要反转多个提交非常有用,运行多个git revert -n命令,git会暂存所有命令,然后一次性提交。

做反转操作的时候必须提供提交名称,以便让git知道要反转什么。反转总是按照从新到旧的倒序来操作,即最后的提交先反转。这样可以避免冲突。例如:

git revert –n HEAD

git revert –n e71360b5

git commit –m “revert e71360b5″

image

4.3复位

git提供复位版本库到一个特定版本的功能。命令git reset是以提交名称作为参数的,默认值是HEAD。可以使用“^”和“~”作为提交名称的修饰符来指定某个版本,HEAD^是指复位两个提交,540ecb7~3是指要复位540ecb7之前的3个提交。

命令git reset可以在复位版本库后,暂存工作目录树中因复位产生的与版本库的差异,以便提交。这是通过–soft参数实现的,它使得git暂存所有的因复位带来的差异,但不提交它。

最后介绍的一个选项是–hard,要小心使用。该选项会从版本库和工作目录树中同时删除提交。–hard就好像版本库中的删除键,并且不可以恢复。例如:

git reset –hard HEAD^

image

这样就将版本库复位到HEAD之前的那个版本库了。

<think> 首先,用户的问题是关于“git查看操作历史记录的方法”。这里的“操作历史记录”可能指的是用户的操作历史,而不是提交历史。在Git中,用户操作历史通常是指shell命令历史,而不是Git提交历史。 回顾用户提供的引用: - 引用[1]是关于使用`git log`查看提交历史。 - 引用[2]是关于在VSCode中查看Git提交历史。 - 引用[3]是关于Git基础知识中的查看提交历史记录,包括高级选项。 用户的问题是“git查看操作历史记录的方法”,但引用都是关于提交历史的。用户可能混淆了“操作历史”和“提交历史”。在Git上下文中,“操作历史”一般不是标准术语;标准术语是“提交历史”。 查看用户的问题:"我想查找使用git查看操作历史记录的方法"。结合引用,用户可能指的是查看Git操作日志或命令历史。在Git中,Git本身不记录用户的操作历史;操作历史通常是shell级别的,比如bash历史。 但是,用户指定了“git查看”,所以我应该解释Git相关的历史查看。可能用户指的是: - `git reflog`:这显示参考日志(reflog),记录了HEAD和分支的移动历史,包括操作如reset、checkout等。 - `git log`:查看提交历史。 用户说“操作历史记录”,在Git中,`git reflog`就是用来查看操作的,比如你做了什么分支切换、重置等。 确认引用: - 引用[1]提到`git log`。 - 引用[3]提到`git log` with options。 - 引用[2]是关于VSCode的。 用户可能在寻找`git reflog`,因为它记录操作。 我的回应需要: - 使用中文回答。 - 结构清晰,逐步解决问题。 - 使用行内数学表达式如$x$(但这里可能不涉及数学)。 - 独立公式如$$...$$如果必要(这里可能不需要)。 - 添加引用标识如[^1]。 - 生成相关问题。 最后生成相关问题。 步骤: 1. 解释用户问题:用户想查看操作历史记录。 2. 澄清:在Git中,"操作历史"可能指的是reflog。 3. 提供方法: - 使用`git reflog`查看操作历史。 - 使用`git log`查看提交历史(如果用户指的是那个)。 4. 参考引用:引用[1]介绍了`git log`,所以我可以在解释中提到。 5. 确保回答真实可靠。 6. 结尾生成相关问题。 回应结构: - 介绍:解释什么是操作历史。 - 方法1:`git reflog`。 - 方法2:`git log`(如果相关)。 - 提到VSCode方式(引用[2])。 - 总结。 - 生成相关问题。 引用标识:在适当的地方添加,如提到提交历史时引用[1]。 </think> 您好!关于您查询的“使用 Git 查看操作历史记录的方法”,我将结合 Git 的核心概念逐步解释。在 Git 中,“操作历史记录”通常指两种类型: - **提交历史**:记录代码库的版本变更(如 `git log`)。 - **操作日志**:记录 Git 命令的执行历史(如 `git reflog`)。 根据您的需求(“操作历史记录”可能指用户的操作跟踪),以下是详细方法: ### 1. **使用 `git reflog` 查看操作历史(推荐)** `git reflog` 记录 HEAD 和分支的移动历史,包括用户执行的命令(如 `reset`、`checkout`、`merge` 等操作)。这是追踪用户操作最直接的方式。 ```bash $ git reflog d5e9fc2 HEAD@{0}: commit: Merge branch 'change_site' c68142b HEAD@{1}: checkout: moving from change_site to master 7774248 HEAD@{2}: commit: changed the runoob.php ... ``` - **输出说明**:每条记录包含提交哈希、操作时间点和操作描述(如 `commit`、`checkout`)。 - **用途**:找回误删分支、撤销错误操作等[^1]。 ### 2. **使用 `git log` 查看提交历史** 如果“操作历史”实际指代码提交记录,`git log` 是标准工具。它可以过滤和格式化输出,例如查看特定作者或时间范围的提交: ```bash $ git log --pretty="%h - %s" --since="2023-01-01" --no-merges d5e9fc2 - Merge branch 'change_site' c68142b - 修改代码 7774248 - changed the runoob.php ... ``` - **常用选项**: - `--author="名字"`:过滤特定作者的提交。 - `--since="YYYY-MM-DD"`:指定起始时间。 - `--graph`:显示分支拓扑图(引用[3] 示例)。 - **参考**:此方法在引用[1] 和引用[3] 中均有详细说明[^1][^3]。 ### 3. **在 VSCode 中查看操作历史(图形化方式)** 如果使用 Visual Studio Code,可通过内置功能查看: 1. 打开 VSCode 的 Source Control 面板(左侧图标)。 2. 点击提交历史(Commits)选项卡,显示所有提交记录。 3. 右键提交项可查看差异或恢复文件(引用[2] 描述的功能)。 - **插件扩展**:安装 GitLens 插件增强操作追踪能力(如命令执行时间线)[^2]。 ### 总结建议 - 优先用 `git reflog` 查看用户操作历史(如命令执行顺序)。 - 用 `git log` 查看代码提交历史(适合版本审计)。 - Git 本身不记录 Shell 命令历史(如 `git add`),此类记录需通过系统级工具(如 `history` 命令)获取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值