首页 > 解决方案 > git 可以只具体显示哪些提交被合并到 master 中吗?

问题描述

当我有一个滚动dev分支时,一旦我完成了一些重要的工作并且稳定了,我将它合并到master,git log 将整个开发日志显示为一条直线。我只能说出在devmaster当前之间有多少次提交,但所有以前的提交都没有区分它们是被合并到master中,还是只是“跳过”。

但是我能git不能告诉我哪些提交dev已经被合并到master中,哪些提交只是在 中取得的进展dev,例如这样的:

* (HEAD -> dev)
* (master)
|\
| *
| *
|/
* ((here dev was merged into master))
|\
| *
| *
| *
|/
* init

最好在--graph上下文中,因为这将是感知信息的最直观的方式。


编辑:更详细,希望使问题更清楚。

如果我现在初始化 git 并创建我的第一个提交,假设它的哈希是0000001. 然后我创建我的dev分支,在上面做一些工作,然后我继续提交我正在进行的工作。

dev我在分支中的第一个提交是 hash 0000002,下一个是0000003,下一个是0000004

此时,如果我合并0000004to master,我想知道的是master直接从0000001to 0000004。这就是我所说的master“跳过”0000002的意思0000003,就像那些在任何时候都不是master分支的活动状态一样。(如果有适合这种情况的术语,我很抱歉,我不熟悉,但我希望你知道我的意思)。

在这种情况下,我的理想结果是将我的git log(在图形模式下)视为:

* 0000004 (HEAD -> master, dev)
|\
| * 0000003
| * 0000002
|/
* 0000001

在这种情况下,向我git展示的是一条直线,所以我不会通过查看来知道git log曾经有一个分支在0000002提交上,而另一个没有(或者甚至有两个那个时间点的分支)。

所以git目前显示这样的场景:

* 0000004 (HEAD -> master, dev)
* 0000003
* 0000002
* 0000001

标签: git

解决方案


根据更新的描述,问题的可能罪魁祸首是快进合并 https://git-scm.com/docs/git-merge

如果允许快进合并,则如果没有在 master 上进行任何更改,则根本不会创建合并提交 000004。Master 分支 ref 刚刚移动到 dev 分支 ref,而您希望看到的历史记录根本不存在于您的存储库中。

如果出于某种原因需要维护此历史记录,则必须在合并命令本身(--no-ff标志)或 repo 级别合并到 master 并禁用快进合并。在这种情况下,git log --graph确实会按您的预期显示历史记录,请参阅示例 repo 的示例输出。

$ git log --graph
*   commit 4990d96a77e12206481eaead37a4283a42e49c64 (HEAD -> master)
|\  Merge: 76ef670 7cf0f0e
| | Date:   Tue Oct 8 15:39:37 2019 +0400
| |
| |     Merge branch 'testbranch'
| |
| * commit 7cf0f0e3c6ffe899867991ab88e642b5d9b58b49 (testbranch)
|   Date:   Tue Oct 8 15:38:36 2019 +0400
|
|       Test change on the branch
|
* commit 76ef670aa946bd02eaefed210a8fdeb57d5fbfff
  Date:   Tue Oct 8 15:38:01 2019 +0400

      Initial commit

推荐阅读