在 Git 日志中仅显示一个分支的历史记录
Posted
技术标签:
【中文标题】在 Git 日志中仅显示一个分支的历史记录【英文标题】:Show only history of one branch in a Git log 【发布时间】:2011-06-05 11:42:14 【问题描述】:我在我的项目中使用 Git 并尝试遵循最佳实践:
-
我在一个主题分支上工作
准备就绪后,我使用
git merge --squash
将 topic 分支 合并到我的 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 日志中仅显示一个分支的历史记录的主要内容,如果未能解决你的问题,请参考以下文章