在 Git 日志中仅显示一个分支的历史记录

Posted

技术标签:

【中文标题】在 Git 日志中仅显示一个分支的历史记录【英文标题】:Show only history of one branch in a Git log 【发布时间】:2011-06-05 11:42:14 【问题描述】:

我在我的项目中使用 Git 并尝试遵循最佳实践:

    我在一个主题分支上工作 准备就绪后,我使用 git merge --squashtopic 分支 合并到我的 dev 分支中。这让我的 dev 分支保持干净。 只要 dev 分支稳定并且团队决定是时候发布了,我们就会将 dev 分支合并到 master 分支中, 使用 squash,并将提交标记为版本发布。

这应该保留我们的历史记录,并且使用 gitk,我们可以看到所有提交的来源。但是,我希望能够查看应用于 master 的提交 分支。我试过了:

git log master
git show-branch

这些都不显示只是 master 分支的历史。有没有办法轻松做到这一点?

【问题讨论】:

你不能'git checkout'到'master'分支并做一个'git log'吗? 【参考方案1】:

如果我对您的理解正确,您希望看到合并回 master,而不是这些合并的历史记录。我相信:

git log --merges

会给你你想要的。

更新:添加 --first-parent 应该可以解决这个问题。

git log --merges --first-parent

--第一父母

Follow only the first parent commit upon seeing a merge commit.

此选项可以提供更好的概览 在查看一个进化的时候 特定的主题分支,因为 合并到一个主题分支往往是 只是为了适应更新 不时上游,而这 选项允许您忽略 带入您的个人提交 通过这样的合并历史。

【讨论】:

几乎,但不幸的是,这也显示了发生在 dev 分支中的合并。我只想看到从 dev 合并到 master 第一个父级不一定是之前分支所在的位置,它是在合并期间确定的(发生合并的分支)。如果您快进到合并,则第一个父级是另一个分支。【参考方案2】:

不幸的是,Git 不存储提交的分支信息,并且提交不属于分支。 Git 中的分支只是提交过程中的“移动标签”,而不是预期的提交序列。

所以基本上你不能显示属于分支的提交,因为 Git 中没有这样的概念。

【讨论】:

那么日志命令的 --branches 选项是什么? (Git 存储历史,提交的父级历史总是线性的。因此,实际上存在分支的概念。)【参考方案3】:

由于 Git 不存储有关哪个分支从哪个其他分支新生的信息,因此无法自动猜测您可能希望显示哪个分支。

在这方面,--first-parent 最终不会有帮助,尤其是因为很容易拥有多个主人,例如。考虑:

wc1$ git clone git://shared.com/repo
wc1$ (hack code, git commit)
wc2$ git clone git://shared.com/repo
wc2$ (hack code, git commit, git push somewhere)
wc1$ git fetch origin; git merge origin/master; git push somewhere master;

(随意做一个随机项目并做这个练习。)画图。所以你不能有意义地绘制“只有一个分支”,即使提交是用它们所在的分支的名称标记的(因为两者都是主分支)。

【讨论】:

假设在这样的情况下,多个分支被称为“主”,您想查看所有分支。 (事实上​​,当我想要与这里的原始问题类似的东西时,这通常正是我想要的 - 有多个历史,我想查看所有这些。)所以“哪个您可能想要的分支”将是“所有这些” - 无需将其解析为一个。

以上是关于在 Git 日志中仅显示一个分支的历史记录的主要内容,如果未能解决你的问题,请参考以下文章

Git日志(--follow)无法显示重命名之外的历史记录

在远程存储库上提交历史记录

合并后的 Git 分支和提交历史记录

git删除所有提交历史记录

SVN和GIT提交历史记录和代码差异

Git-Tfs 在分支上缺少历史记录