8

我错过了一些东西。我曾经使用 Mercurial,并且会使用hg log. 很简单:显示了在 repo 中所做的所有变更集。

现在我正在使用 git。我对学习新工具感到非常兴奋,但我对所看到的git log. 我做了一些更改并做出了一些提交。另一个人也创建了修订并提交。我从他的存储库中提取。我做了一个git log并且他的变更集(也许它在 git 中被称为“提交”)不在列表中。如果我明确列出他的哈希号(即git log <hash>),它会显示在顶部。所以它我的仓库中,但我不明白 git 如何决定在我调用git log.

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

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

更新

顺便说一句:我尝试的第一件事是--all,我现在看到很多人建议这样做。但这也没有显示出来:

$ git log | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
$ git log --all | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
$ git log fb2a17c5fb08498e7f2ab364931fddc379be106f  | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
commit fb2a17c5fb08498e7f2ab364931fddc379be106f
4

3 回答 3

16

git log当您不指定引用或引用集时,有一个隐含的参数。它是当前的负责人。所以

git log

扩展到

git log HEAD

这意味着向我展示从当前 HEAD 可访问的所有提交(您的下一个提交将附加到的地方)。

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

git log origin/master

假设你都在 master 上工作并且你已经获取了。

在 git 中,fetch 意味着从远程获取提交但不更新我的任何本地分支git pull将执行 fetch 然后将您的分支与其获取的内容合并。获取、检查已完成的内容然后合并或变基甚至拒绝通过强制推送完成的内容是一个好主意 - 取决于情况和您的工作流程。

通常,要查看获取后在遥控器上做了什么,您可以

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

于 2012-07-20T19:07:54.857 回答
1

git log没有任何进一步的明确参数会显示您当前已签出的提交的历史记录。如果你想查看其他分支或提交,你必须说出git log你想要查看的内容。

git log --all

应该显示所有分支上的所有修订。

有很多很好的教程可以方便地使用谷歌搜索。

于 2012-07-20T17:39:44.687 回答
0

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

于 2012-07-20T17:40:53.983 回答