我错过了什么。我曾经使用过Mercurial,并会查看使用hg log
的回购的修订历史记录。简单:显示在回购中创建的所有更改集。
现在我正在使用git。我对学习新工具感到非常兴奋,但我对git log
所看到的内容感到困惑。我做了一些更改并做了一些提交。另一个人也创建了一个修订版并且已经提交了。我从他的存储库中取出。我做了git log
并且他的变更集(可能在git中称为“commit”)不在列表中。如果我明确列出他的哈希值(即git log <hash>
),它会显示在顶部。所以我的回购邮件 ,但是我不明白当我打电话给git log
时git决定告诉我它的作用。
我查看git help log
,但它在说明中说“它显示了提交日志”。从我的角度来看,这是不正确的。或者可能不完整,因为实际上它显示了它们的一些子集。但我不知道它是什么子集,也不知道它如何决定要展示什么。
有人可以向我解释git log
吗?
更新
顺便说一句:我尝试过的第一件事就是 - 所有,我现在看到很多人都提出这个建议。但这也没有显示出来:$ git log | grep fb2a17c5fb08498e7f2ab364931fddc379be106f
$ git log --all | grep fb2a17c5fb08498e7f2ab364931fddc379be106f
$ git log fb2a17c5fb08498e7f2ab364931fddc379be106f | grep fb2a17c5fb08498e7f2ab364931fddc379be106f
commit fb2a17c5fb08498e7f2ab364931fddc379be106f
答案 0 :(得分:11)
当您未指定引用或引用集时,git log
会隐含一个参数。这是目前的头脑。所以
git log
扩展为
git log HEAD
这意味着向我显示当前HEAD(您的下一次提交将附加的位置)可以访问的所有提交。
为了看到你同事的工作,你可以
git log origin/master
假设您正在使用master并且已经获取了。
在git中,fetch意味着从远程获取提交但不更新任何本地分支。 git pull
将执行提取,然后将您的分支与其提取的内容合并。最好是获取,检查已完成的工作,然后合并或修改甚至拒绝使用强制推送执行的操作 - 取决于具体情况和工作流程。
通常,要查看获取后在遥控器上执行的操作,您可以
git log ..origin/master
这真的扩展到了
git log HEAD..origin/master
..
运算符是用于组合“从此引用中排除可达提交”和“包含来自此引用的可达提交”的简写。所以它也可以这样写:
git log ^HEAD origin/master
引用开头的^
意味着排除可从此处到达的提交。在这种情况下,它意味着您可以从您所在的位置到达。结果将是刚刚从服务器获取的此分支上的提交列表。
您可以只使用git log
参数,而不是将所有分支和远程分支列为--all
的参数:
git log --all
将显示所有分支(本地和远程跟踪)和标记可以访问的所有提交。
git log
是一个非常强大的命令,因为它允许您基于集合减少要查看的提交。 ..
是一个很好的语法。还有...
表示包含从指定的分支到其共同祖先的提交。
历史的走向使得git如此强大并且能够支持如此众多有趣的工作流程。
<强>更新强>
当git遇到与它的父级存储的树中包含的内容相同的提交时,它不会在合并时列出提交。
git log --all --sparse
不会排除这些提交。
请参阅http://linux.die.net/man/1/git-log
的历史简化部分这也可能意味着你重置一个分支或你的朋友做了,再次抓取已经丢失了该引用。使用sha1进行git log时,如果添加--decorate,输出是什么?另请尝试git log --walk-reflogs
。
答案 1 :(得分:0)
git log
会显示您当前已签出的提交的历史记录。如果您想查看其他分支或提交,您必须告诉git log
您想要查看的内容。
git log --all
应显示所有分支的所有修订。
有很多很好的教程可以轻松使用谷歌搜索。
答案 2 :(得分:0)
你是对的---默认情况下,git log只显示提交的子集。默认情况下,git log仅显示从当前分支的尖端可见的提交。您朋友的提交尚未在您当前的分支中,因此它不会显示在git log中。