git - git 可以只具体显示哪些提交被合并到 master 中吗?
问题描述
当我有一个滚动dev
分支时,一旦我完成了一些重要的工作并且稳定了,我将它合并到master
,git log 将整个开发日志显示为一条直线。我只能说出在dev
和master
当前之间有多少次提交,但所有以前的提交都没有区分它们是被合并到master
中,还是只是“跳过”。
但是我能git
不能告诉我哪些提交dev
已经被合并到master
中,哪些提交只是在 中取得的进展dev
,例如这样的:
* (HEAD -> dev)
* (master)
|\
| *
| *
|/
* ((here dev was merged into master))
|\
| *
| *
| *
|/
* init
最好在--graph
上下文中,因为这将是感知信息的最直观的方式。
编辑:更详细,希望使问题更清楚。
如果我现在初始化 git 并创建我的第一个提交,假设它的哈希是0000001
. 然后我创建我的dev
分支,在上面做一些工作,然后我继续提交我正在进行的工作。
dev
我在分支中的第一个提交是 hash 0000002
,下一个是0000003
,下一个是0000004
。
此时,如果我合并0000004
to master
,我想知道的是master
直接从0000001
to 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
解决方案
根据更新的描述,问题的可能罪魁祸首是快进合并 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
推荐阅读
- python - 从熊猫数据框中另一列的每个唯一值的范围内的列中找到一个固定值
- reactjs - React Styled-Components 传递道具问题
- javascript - 当参数是对象时,函数参数变量是否从堆栈中弹出?
- angular - TSConfig 未知编译器选项“lib”
- boto3 - AWS EMR BOTO3,找不到集群列表:需要所有集群详细信息
- spring-boot - 如何使用类型名称转换在 cassandra 中创建 TYPE (UDT)。是否可以将强制转换创建为类型,因为它是一个函数?
- c++ - 如何生成位图头数据,然后使用 C++ 写入文件
- asp.net - 在 ASP.NET Web 表单中调用 Web API 时,它无法加载文件或程序集“Autofac.Integration.Web”或其依赖项之一
- java - Hibernate 延迟加载在 @OneToOne 映射中不起作用
- python - 在python中使用正则表达式单词边界提取单词形式字符串