如何在历史记录中查看"合并事件"?



我使用 GitHub Web 界面和 git cli。感谢其中之一或两者的答案。

有时,当我将一个分支合并到另一个分支时,我在 GitHub 历史记录中看到一个提交,其中包含类似"将分支'master'合并到other_branch"之类的消息。但并非总是如此。那么如何查看历史记录中的所有"合并事件"呢?

如果我能得到一个显示分支和合并的垂直线(如图形)的视图,那就更好了。

并不总是能够恢复所有合并事件,尽管这似乎违反直觉。 最可能的原因是,当您(或某人)请求合并时,可以进行"快进"(并且没有给出合并选项--no-ff),因此没有执行"真正的合并"。 例如:

X -- X -- X -- A <--(master)
 
X -- X -- X -- B <--(branch)

在这种情况下,快进是不可能的,因为分支已经分叉,所以在合并后,您将看到一个合并提交。

git checkout master
git merge branch
X -- X -- X -- A -- M <--(master)
                /
X -- X -- X -- B <--(branch)

但如果你有

X --- X --- A <--(master)

x --- x --- B <--(branch)

现在你创建了一个分支,但没有任何关于master的新工作,所以分支没有分歧。 相反,一个就在另一个后面。 如果您不禁止它,则合并时将发生快进。

git checkout master
git merge branch
X --- X --- A --- x --- x --- B <--(branch)(master)

没有发生合并的记录,也无法恢复"合并事件"。 (在发生这种情况的本地存储库中,有一个 reflog 条目可用于弄清楚它;但 reflog 条目是临时的,不与远程共享,因此出于所有实际目的,您不能指望任何合并记录。

此外,有很多人发誓线性历史记录是"更干净的"(即使该历史记录最终主要由从未构建和测试过的提交组成),因此他们故意重新排列其提交拓扑,以允许每次合并都是快进的。 还有其他技术可以组合在特殊情况下使用的代码行。

那么这对你的问题意味着什么?

首先,并非所有合并事件都会被记录。 如果要确保记录合并事件以便以后可以观察它们,则必须始终使用--no-ff选项(并且不使用--squash选项)进行合并。

其次,git 日志输出通常会显示记录的所有合并事件。 我想不出历史简化会排除合并的情况,但如果您担心,可以将--full-history添加到 log 命令中。 您甚至可以要求仅查看合并(--merges)。

您还可以使用git log --graph或使用类似gitk的 gui 来获取分支的图形视图。

请注意,默认情况下,我提到的用于查看提交/合并的任何命令将仅显示可从当前签出的提交 (HEAD) 访问的命令。 如果要查看所有内容,请指定--all;如果要查看可从分支列表中访问的所有内容,请列出分支。

最新更新