2012-07-20 138 views
4

我错过了一些东西。我曾经使用过Mercurial,并会使用hg log来查看回购的修订历史记录。简单:全部显示有史以来在回购中所做的变更集。git log告诉我什么?

现在我使用的是git。我对学习新工具感到非常兴奋,但我对git log的看法感到困惑。我做了一些改变并做了一些提交。另一个人已经创建了一个修订并承诺。我从他的存储库中取出。我做了一个git log和他的变更(也许它在git中称为“提交”)不在列表中。如果我明确列出了他的散列号(即git log <hash>),它会显示在顶部。所以它在我的回购,但我不明白如何git决定告诉我它是什么时,我打电话git log

我看了git help log,但它在描述中说“它显示提交日志”。从我的角度来看,这是不正确的。或者可能不完整,因为实际上它显示了它们的一部分。但我不知道哪个子集,也不知道它如何决定展示什么。

有人可以向我解释git log吗?

更新

BTW:有一个问题我试过的第一件事就是 - 所有的,我现在看到很多人建议它。但是,这并不表明它要么:

$ git log | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
$ git log --all | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
$ git log fb2a17c5fb08498e7f2ab364931fddc379be106f | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
commit fb2a17c5fb08498e7f2ab364931fddc379be106f 
+0

我不相信我可以解释'git log',但我有'git gl'别名到'git log --graph --all --decorate --sparse'。这与Mercurial的带有图形日志扩展的'hg gl'功能密切相关,但不完全相同。 – laffoyb 2015-02-26 16:47:42

回答

11

当您未指定参考或参考集时,git log存在隐含参数。这是目前的头。所以

git log 

扩展到

git log HEAD 

这意味着显示我的所有当前磁头到达的提交(在您下次提交将连接)。

为了看到你的同事的工作,你可以

git log origin/master 

假设你都努力掌握你已经取出。

在git中,获取意味着从远程获取提交,但不更新我的任何本地分支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如此强大,并且能够支持如此多有趣的工作流程。

UPDATE:

当遇到的git提交,在什么是包含在它存储在那里的树方面是相同的父,它不会列出当它走合并的提交。

git log --all --sparse 

不会排除这些提交。

看到的http://linux.die.net/man/1/git-log

历史简单化节这也意味着您重置分支或您的朋友做,并再次获取已经失去了参考。当你用sha1做git日志时,如果你添加了--decorate它,输出是什么?另请尝试git log --walk-reflogs

+0

感谢您的回答。我更新了这个问题 - 请注意,git log --all并不显示我正在寻找的修订版本。当我明确地将它传递给日志时,它显示出来。 – firebush 2012-07-20 19:59:52

+0

git log有时会隐藏相同的提交。如果树相同,它将不会列出它。添加'--sparse'参数以列出这些参数。 – 2012-07-20 20:07:23

0

git log没有任何进一步的明确的参数显示你的历史提交您目前已签出。如果你想看看其他分支或提交,你必须告诉git log你想看什么。

git log --all 

应显示所有分支机构的所有修订。

有很多很好的教程,容易谷歌搜索。

0

你是对的---默认情况下,git log只显示提交的一个子集。默认情况下,git log只显示当前分支的提示中可见的提交。你的朋友的提交不在你当前的分支中,所以它不会显示在git log中。

+0

当处于分离头模式时,您没有当前分支。 – 2012-07-20 19:11:13