git log只返回对master分支的提交?

时间:2013-04-08 09:06:48

标签: git

我做了一些搜索并找到了:

git log myBranchName

作为可能的解决方案。但是当我的分支是主分支时会发生什么?我跑的时候:

git log master

它似乎返回所有提交给任何分支的东西。根据我读过的内容,它列出了与主分支相关的所有提交。知道了,我怎么才能调出主分支的提交历史记录?

2 个答案:

答案 0 :(得分:50)

我认为这就是你想要的

git log --first-parent master

引用手册

  

在看到合并提交时,仅遵循第一个父提交。这个   在查看a的演变时,选项可以提供更好的概述   特定主题分支,因为合并到主题分支往往是   只是关于不时调整到更新的上游,这个   选项允许您忽略引入您的个人提交   这种合并的历史。

答案 1 :(得分:14)

由于Git的分支模型,提交不属于单个或多个分支。分支是整个提交图中指向单个提交对象的指针。因此,当你说X中的提交是“在分支X上”时,通常意味着当从分支X指向的提交开始时它是可达的。

对于git log,默认行为等于git log HEAD,其中HEAD指的是当前分支当前指向的提交。因此,如果您在主分支上,它等于git log master,显示从最近一次提交开始时可以访问的所有提交。

不幸的是,你所指的某个分支的提交在Git中没有明确定义。如果我在master上进行提交,然后创建一个指向同一提交的新分支(例如使用git branch newbranch),那么除了名称之外,该分支与master分支完全相同。所以每个属性“在分支主机上制作”现在也暗示“在分支新分支上制作”。因此,你不能在Git中拥有这个属性。

即使是parkydr的解决方案,它显示了仅在合并的一侧进行的所有提交,也不是一个防故障解决方案。理想情况下,它会隐藏在单独的非主分支上进行的所有提交,然后将这些提交合并回主服务器。因此,您只能获得直接对主线进行的提交,或者在其他一些提交中进行合并提交的提交。但是,有两件事会妨碍它的运作:

  1. 快进合并:当您从master分支并创建一些提交时,直接在master上创建新的提交时,master上的git merge somebranch将快进提交,导致master分支指向与 somebranch 相同的提交。因此,您“丢失”这些提交最初在单独分支上创建的信息。您可以强制Git始终使用git merge --no-ff创建合并提交,但之后这对您没有帮助。
  2. 无法保证合并顺序:当您使用主服务器并合并分支时,之前的主提交将始终成为第一个父服务。所以你会得到你想要的行为。然而,完全有可能在所述分支上,而是合并master,导致主提交是第二个父。然后可以将master快速转发(或重置)到新提交,从而产生“反向”视图。
  3. 所以,最重要的是你无法安全地获得这样的历史。你最好习惯Git灵活的分支模型如何运作。