Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git日志向我展示了什么?_Git - Fatal编程技术网

git日志向我展示了什么?

git日志向我展示了什么?,git,Git,我错过了一些东西。我曾经使用Mercurial,并且会使用hg log查看回购协议的修订历史。简单:显示回购协议中所有的变更集 现在我正在使用git。我对学习这个新工具感到非常兴奋,但我对所看到的git log的内容感到困惑。我做了一些更改并做出了一些承诺。另一个人创建了一个修订版,并已提交。我从他的仓库里取出了。我做了一个git日志,他的变更集(在git中可能称为“提交”)不在列表中。如果我明确列出他的散列号(即,git log),它会显示在顶部。所以它在我的回购协议中是,但我不明白git是如

我错过了一些东西。我曾经使用Mercurial,并且会使用
hg log
查看回购协议的修订历史。简单:显示回购协议中所有的变更集

现在我正在使用git。我对学习这个新工具感到非常兴奋,但我对所看到的git log的内容感到困惑。我做了一些更改并做出了一些承诺。另一个人创建了一个修订版,并已提交。我从他的仓库里取出了。我做了一个
git日志
,他的变更集(在git中可能称为“提交”)不在列表中。如果我明确列出他的散列号(即,
git log
),它会显示在顶部。所以它在我的回购协议中是,但我不明白git是如何决定在我调用
git log
时向我展示它的功能的

我查看了
git帮助日志
,但在描述中说它“显示了提交日志”。从我的角度来看,这是不正确的。或者可能是不完整的,因为实际上它显示了其中的一些子集。但我不知道是什么子集,也不知道它如何决定要显示什么

有人能给我解释一下git日志吗

更新

顺便说一句:我尝试的第一件事是——全部,现在我看到很多人都在建议。但这也没有表现出来:

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

git log
不带任何进一步的显式参数,显示当前已签出的提交的历史记录。如果您想查看其他分支或提交,您必须告诉git log

git log --all
应显示所有分支上的所有修订


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

你说得对——默认情况下,git日志只显示提交的一个子集。默认情况下,git日志仅显示当前分支尖端可见的提交。您朋友的提交尚未在当前分支中,因此它不会显示在git日志中。

当您未指定引用或引用集时,
git日志有一个隐含参数。这是当前的头。所以

git log
扩展到

git log HEAD
git log HEAD..origin/master
这意味着向我显示从当前头部(您的下一次提交将附加到的位置)可访问的所有提交

为了查看同事的工作,您可以

git log origin/master
假设你们都在使用master,并且已经获取了

在git中,fetch表示从远程获取提交,但不更新任何本地分支
git pull
将执行fetch操作,然后将您的分支与其获取的分支合并。获取、检查所做的工作,然后合并或重新设置基础,甚至拒绝使用强制推送所做的工作,这是一个好主意,这取决于具体情况和您的工作流

通常,要查看在抓取后远程执行的操作,您可以

git log ..origin/master
这真的扩展到

git log HEAD
git log HEAD..origin/master
运算符是“从此引用中排除可访问的提交”和“从此引用中包括可访问的提交”的缩写。也可以这样写:

git log ^HEAD origin/master
引用开头的
^
意味着排除可从此处访问的提交。在这种情况下,它意味着你可以从你所在的地方获得什么。结果将是刚刚从服务器获取的该分支上的提交列表

您可以使用
--all
参数,而不是将所有分支和远程分支列为
git log
的参数:

git log --all
它将显示所有分支(本地和远程跟踪)和标记可访问的所有提交

git log
是一个非常强大的命令,因为它允许您对希望看到的提交进行基于集合的缩减<代码>。
是一种很好的语法。还有
,它说要包括从指定的两个分支到它们的共同祖先的提交

这种历史的漫游使git如此强大,能够支持如此多有趣的工作流

更新:

当git遇到与其父级存储在树中的内容相同的提交时,它在执行合并时不会列出提交

git log --all --sparse
不会排除这些提交

请参阅的历史简化部分


这也可能意味着您重置了一个分支,或者您的朋友重置了分支,而再次获取已丢失该引用。当您使用sha1执行git日志时,如果您向其添加--decoration,输出是什么?另外,请尝试使用git log--walk reflogs

当处于分离头部模式时,您没有当前分支。谢谢您的回答。我更新了这个问题——注意git日志——all没有显示我正在寻找的版本。当我显式地将其传递给log时,它会显示出来。git log有时会隐藏相同的提交。如果树是相同的,它不会列出它。添加
--sparse
参数也可以列出它们。我不相信我可以解释
git log
,但我已经将
git gl
化名为
git log--graph--all--decoration--sparse
。这使得功能接近Mercurial的
hg gl
,但与graphlog扩展不同。