如何从另一个分支中`git log`一棵树?

70
假设我有一个带有分支A和分支B的Git存储库。
分支B当前已检出(即.git/HEAD包含refs/heads/B)。
现在,在未检出分支A的情况下,如何查看分支Apath/file的历史记录(日志)?
根据git help rev-parse所述,我尝试使用git log A:path/file,但似乎不起作用(没有输出)。为什么呢?

1
“A:path/file” 是特定 树对象或 blob 对象 的名称(标识符)的快捷方式。要让 git log 跟踪历史记录,您需要从 commit-ish 开始。 - Jakub Narębski
1
@Jakub,好的,但是git log path/file是如何工作的? - ulidtko
1
git log path/filegit log HEAD -- path/file - Jakub Narębski
1个回答

108
请尝试以下命令(不需要包括尖括号): git log <分支> -- <文件路径>

好的,这个可行。现在,用管道术语解释一下,有什么区别? - ulidtko
1
我不熟悉 <branch>:<path> 语法。我只是参考了 man git-log,它提供了 git log [<options>] [<revision range>] [[--] <path>...]。同样地,如果输入许多命令时出现错误,git 会发出以下警告:使用 '--' 将路径与修订版本分开,像这样: 'git <command> [<revision>...] -- [<file>...]' - pattivacek
这个网址 https://dev59.com/_nXYa4cB1Zd3GeqP5VtS 能帮助回答你的问题吗? - pattivacek
看起来冒号(:)用于分离两个不同的树(例如远程分支和本地分支),但这里并没有发生。您只检查了一个分支,为了将分支与路径分开,您需要使用相当标准的 --。这提供了一些解释:http://git-scm.com/book/ch9-5.html - pattivacek
3
我使用的记忆技巧是 <tree-ish>:<path>,也就是说,一个表达式对应一个对象,即树(目录)或文件,这两个对象都没有历史记录,因此适用于 git show A:path/filegit log <commit> -- <path> 则是 两个 表达式:从 <commit> 开始的历史记录限制为与 <path> 有关的提交。希望对你有所帮助。 - Jakub Narębski
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接