2013-04-08 82 views
19

我已经做了一些搜索,发现:git log仅返回对主分支进行的提交?

git log myBranchName 

一个可能的解决方案。但是当我的分支是主分支时会发生什么?当我运行时:

git log master 

它似乎返回所有提交到任何分支。根据我读过的内容,它列出了与主分支相关的所有提交。了解这一点,我如何才能调用主分支的提交历史记录?

回答

39

我觉得这是你想要

git log --first-parent master 

引述手动

按照只有第一父提交见状合并提交什么。这个 选项可以在查看特定主题分支的演变时给出更好的概述,因为合并到主题分支往往只有 关于调整上游时不时更新,而这个 选项允许您忽略个人通过这种合并提交到您的 历史记录。

+3

'--first-parent master'对于我正在处理的问题非常有用:确定哪些合并(--merges)进入了master,vs合并到主题分支上。 – 2013-09-20 20:31:36

+0

谢谢。我认为我应该以解决这个问题的方式进行市场营销。 – 2014-11-19 18:07:25

+0

只是单挑,它并不完美。如果之前对'master'的提交碰巧被列为提交的_second_父项,这会给你一个错误的提示。但是,如果您遵循GitHub的pull请求/合并流程,通常不会发生这种情况。 – PJSCopeland 2017-08-17 21:36:14

10

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

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

不幸的是,你提到的作为对某个分支的提交在Git中没有明确定义。如果我在主服务器上进行提交,然后创建一个指向相同提交的新分支(例如使用git branch newbranch),那么除了名称之外,该分支字面上与主分支相同。因此,每个属性“在分支主人”“现在也意味着”在分支新分支“。因此你不能在Git中拥有这个属性。

即使parkydr的解决方案,它显示所有仅在合并的一侧进行的提交,并不是一个失败的解决方案。理想情况下,它会隐藏所有那些在独立的非主分支上进行的提交,然后合并回主。因此,您只会直接向主线提交提交或在其他提交中合并提交合并的提交。但是有两件事情,这将阻止这样做:

  1. 快进合并:当您从主分支,并创建一些提交,而在主直接创建没有新的,然后在主一git merge somebranch将快 - 提交提交,导致主分支指向与some branch相同的提交。因此,您“失去”那些提交最初在独立分支上创建的信息。尽管如此,你可以强制Git始终创建合并提交,使用git merge --no-ff,但这对你以后不会有所帮助。
  2. 并不保证合并顺序:当你在master上并且合并一个分支时,那么以前的主提交将总是作为第一个父项。所以你会得到你想要的行为。但是,完全有可能在所述分支上,并且将主合并代替,导致主提交是第二个父代。然后master可以被快速转发(或重置)到新的提交,从而产生一个“反向”视图。

所以,底线是,你不能安全地得到这样的历史。你最好习惯Git灵活的分支模型的工作原理。

相关问题