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

Kri*_*son 29 git

我做了一些搜索,发现:

git log myBranchName
Run Code Online (Sandbox Code Playgroud)

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

git log master
Run Code Online (Sandbox Code Playgroud)

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

par*_*ydr 53

我想这就是你想要的

git log --first-parent master
Run Code Online (Sandbox Code Playgroud)

引用手册

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

  • ` - first-parent master`对我正在处理的问题非常有用:确定哪些合并(--merges)进入master,vs合并主题分支. (4认同)

pok*_*oke 14

由于Git的分支模型,提交不属于单个或多个分支.分支是整个提交图中指向单个提交对象的指针.因此,当您在X中表示提交是"在分支X上"时,通常意味着在分支X指向的提交处开始时可以访问它.

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

不幸的是,你所指的是某个分支的提交在Git中没有明确定义.如果我在master上进行提交,然后创建一个指向同一提交的新分支(例如使用git branch newbranch),那么除了名称之外,该分支在字面上与主分支完全相同.所以每一个"在分支大师身上制造"的财产现在也意味着"在分支新分支上制造".因此,您不能在Git中拥有此属性.

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

  1. 快进合并:当你从master分支并创建一些提交时,直接在master上创建新的提交,然后git merge somebranchon master将快进提交,导致master分支指向与somebranch相同的提交.因此,您"丢失"这些提交最初在单独分支上创建的信息.你可以强制Git总是创建合并提交,虽然使用,git merge --no-ff但这对你后来无济于事.
  2. 无法保证合并顺序:当您使用master并合并分支时,之前的主提交将始终是第一个父提交.所以你会得到你想要的行为.然而,完全有可能在所述分支上,而是合并master,导致主提交是第二个父.然后可以将master快速转发(或重置)到新提交,从而产生"反转"视图.

所以,最重要的是,你无法安全地获得这样的历史.你最好习惯Git灵活的分支模型是如何工作的.