我正在使用以下命令在文件的情况下获取上一个提交的键:
git log --max-count=1 --pretty=format:'%H' COMMITKEY~1 -- path/to/file
但是,在删除文件的情况下,它将返回错误: stderr: 'fatal: ambiguous argument 'path/to/file': unknown revision or path not in the working tree.
所以我尝试了这样的事情:
git log --max-count=1 --pretty=format:'%H' --all --full-history COMMITKEY~1 -- path/to/file
这实际上返回一个提交密钥,但始终是最新的,而不是前一个。即使我将修订版更改为COMMITKEY~2
或其他内容,它也会返回同一提交密钥。
这里怎么了?
第二个命令出了什么问题是 --all
参数告诉 log
,除了您专门调用的任何提交ID(即COMMITKEY~1
或其他任何提交ID(之外,它还应包括历史每个已知的Ref(分支,标签等(中的。因此,返回的值是从任何Ref 或中找到的第一个提交。
,但我不关注您如何获得提到的错误,无论如何都要形成第一命令。--
删除了该参数(至少在我的测试中和根据文档中确实如此(。
您确定与第一个命令一起使用--
吗?
您对--all
的使用很容易解释您的第二个命令,因为--all
等于手动列出所有参考资料,因此您当然会始终返回最新的提交。
实际上,您可以缩写--max-count=1
至-1
,因此使用git log -1 --pretty='%H' commit-ish~ -- path/to/file
就足够了,也可以正常工作。
如果您不使用--
告诉GIT有一条路径,则仅收到消息'fatal: ambiguous argument 'path/to/file': unknown revision or path not in the working tree
历史。