git log给我看了什么?

时间:2012-07-20 17:30:46

标签: git

我错过了什么。我曾经使用过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

3 个答案:

答案 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中。