如何在历史记录中看到“合并事件”?

时间:2017-05-23 12:03:19

标签: git github merge

我使用GitHub网页界面和git cli。对其中一个或两个的答案表示赞赏。

有时候,当我将一个分支合并到另一个分支时,我会在GitHub历史记录中看到一个提交消息,例如“将分支'主'合并到other_branch'。但不总是。那么如何在历史中看到所有“合并事件”?

如果我可以使用垂直线显示分支和合并(如图形),那就更好了。

1 个答案:

答案 0 :(得分:1)

并不总是能够恢复所有所有合并事件,尽管看起来反直觉。最可能的原因是,当你(或某人)要求合并时,"快进"是可能的(并没有给出合并选项--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)

没有发生合并的记录,也无法恢复&#34;合并事件&#34;。 (在发生这种情况的本地仓库中,有一个可用于解决问题的reflog条目;但是reflog条目是临时的,不与远程共享​​,所以出于所有实际目的,你不能指望任何合并记录。)

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

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

首先,并非所有合并事件都被记录下来。如果您想确保记录合并事件以便以后可以观察它们,那么您必须始终将 --no-ff选项合并(并且不用 --squash选项)。

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

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

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