双点(.)与git责怪命令一起使用时的含义



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

Version 1
Version 1
Version 1

接下来,它被提交:

$ git commit -am Version1

Test.TXT也遭受了一些打击:

Version 1
Version 2
Version 1
$ git commit -am Version2

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

$ 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指责只会导致出现符合所选SHA1提交的文件版本,不是吗?它甚至没有显示以前提交的SHA1(这样的结果可以通过使用不带两个点的指责来实现(,也没有显示下面的提交(我试图实现(。相反,我们可以看到由插入符号设置的键入的SHA1版本。

有人能解释一下使用这个命令(带双点(的原因吗?

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

git blame ..

git会告诉你:

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

论点:

..

在本例中,是对父目录的引用。如果您随后传递一个文件作为参数:

git blame .. -- changelog.txt

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

嗯。。。。..似乎指向the parent directory,正如zbrbite所说。。。这是我第一次看到它被这样使用。。。。(..然后提供fulename(。我知道,如果你想指责只分析修订的子集,而不是文件的全部内容(比如……version-from-a-year-ago..some-branch(,你可以使用它。然后,假设您专门提供了一个修订版,git实际上并没有像当前修订版那样检查文件。它将责任归咎于该文件,因为它是该修订的。。。。。^的意思是,据我所知,它在可供分析的修订范围内(比如……一个已有10年历史的项目,你可能会要求指责检查过去5年的情况……它可能会发现这条线来自这5年的第一次修订……可能有比它更古老的修订,但它无法进一步检查,因为你只限于过去5年……因此你得到了一个^(。如果你提供了HEAD(并且你站在第二个修订版上(作为修订版,如果该修订版上的行发生了某种变化,你可能会得到新的修订版。。。。。但你在用HEAD进行指责时,每一行都得到了新的修订?这听起来像是您更改了文件的EOL格式。如果您尝试git blame -w -- the-file会发生什么?

相关内容

  • 没有找到相关文章

最新更新