首页 > 解决方案 > 与 git-blame 命令一起使用时双点 (..) 的含义

问题描述

有了一个初始存储库,我创建了一个Test.TXT文件并用以下内容填充它:

Version 1
Version 1
Version 1

接下来,它被提交:

$ git commit -am Version1

并进行Test.TXT了一些修改:

Version 1
Version 2
Version 1

$ git commit -am Version2

现在我很想知道自版本 1 以来对文件进行了哪些更改:

$ git log --oneline -- Test.TXT
f315c22 (HEAD -> master) Version2
3b173c2 Version1

$ git blame 3b173c2 .. -- Test.TXT
^3b173c2 (Mergasov 2020-10-06 13:49:50 +0300 1) version 1
^3b173c2 (Mergasov 2020-10-06 13:49:50 +0300 2) version 1
^3b173c2 (Mergasov 2020-10-06 13:49:50 +0300 3) version 1

这种责备的输出让我有些意外。

首先,插入符号 (^) 在这里代表什么?责备文档将其称为边界标记(即,它标记文件的第一次提交)。但是,如果我输入HEAD(这是 的第二次提交Test.TXT)而不是3b173c2,我会再次得到^f315c22(在每一行中)。

因此,以这种方式使用 git blame 只会导致出现适合所选 SHA1 提交的文件版本,不是吗?它甚至没有显示之前提交的 SHA1(这样的结果可以通过使用不带两个点的责备来实现),也没有显示后续提交(我试图完成)。取而代之的是,我们可以看到键入的 SHA1 版本由插入符号表示。

任何人都可以解释使用此命令(带有双点)的原因是什么?

标签: gitgit-blame

解决方案


如果您只是执行命令(在 repo 根目录中):

git blame ..

git 会告诉你:

$ git blame ..
fatal: '..' is outside repository

论据:

..

在这种情况下,是对父目录的引用。如果您随后将文件作为参数传递:

git blame .. -- changelog.txt

您会注意到输出具有^abcdbeef每一行的语法以及您作为提交者的名称(虽然它实际上可能是其他人的文件)。引用之前意味着它无法从您当前的^分支/引用中访问。


推荐阅读