gpt4 book ai didi

Git - 为什么在已删除文件上运行命令时需要双破折号?

转载 作者:IT王子 更新时间:2023-10-29 01:01:31 27 4
gpt4 key购买 nike

考虑一个 git 存储库,其中一个文件曾经被删除。

git rm path/to/file
git commit -a -m"testing"

好的,现在我想查看文件的 git log,但我收到了经典的错误消息:

git log path/to/file
fatal: ambiguous argument 'path/to/file': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

解决方法很简单——添加--:

git log -- path/to/file

但是……为什么?为什么需要这个?这里的理由是什么? git 不能做一个有根据的猜测,这可能曾经是一个文件吗?我理解“歧义”问题 - 但从来没有那个名字的标签。如果文件曾经被删除,并且没有标签,那么选择“文件解释”总是不错的选择。

另一方面,可以有一个与文件同名的标签,git log 处理得很好:

fatal: ambiguous argument 'path/to/file': both revision and filename
Use '--' to separate filenames from revisions

这种行为似乎不一致。谁能解释一下 git 开发人员的想法?

最佳答案

git log 可用于文件以及分支、标签等。

假设您有一个名为a/b/c 的文件夹,您将使用

获取此 文件夹 的提交
git log a/b/c

没关系。

您还可以有一个名为 d/e/f 的分支。您将使用

获得此 分支 的提交
git log d/e/f

那也行。

如果不能明确确定 git log 应该处理的项目,事情就会变得复杂起来。如果你很笨并且也调用你的 branch a/b/c,git 不知道应该打印谁的日志:branch a/b/c 或您的目录 a/b/c 的日志?因此,您必须多说一点您希望收到的信息:

  • 显示分支 a/b/c的日志:
    git log a/b/c --
  • 显示当前分支文件夹a/b/c的日志:
    git log --a/b/c
  • a/b/c分支中显示文件夹a/b/c的日志:
    git log a/b/c -- a/b/c

对于删除的文件,您有类似的问题:工作副本中既没有名为 path/to/file 的文件,也没有名为 path/to/的分支文件。这就是您必须指定所需内容的原因。

当然,git 可以知道在 20.000 次修订之前一个名为path/to/file 的文件,但这需要(最坏的情况)搜索整个历史你的项目是否存在这样的文件。

通过在--之后显式指定文件路径,你告诉git:

search harder for that file, even if it takes hours


结论(回答你的问题):
在您的情况下,-- 是必需的,否则 git log 通常会运行得更慢。

关于Git - 为什么在已删除文件上运行命令时需要双破折号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15973182/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com