Git分支之merge问题模型

目录:
   问题记录
   正文



问题记录

在这里插入图片描述
问题概述:

1.  中间的commit的值有哪些呢??   中间的commit有master分支的commit也有dev分支的commit值.
2.  而中间的commit值的先后顺序又是怎么样的?  肯定有人用git log --pretty=oneline来查看日志信息. 得到以下内容.

在这里插入图片描述
有人认为master分支上commit值的先后顺序是这样的.



我们用gitk来查看master分支和dev分支具体信息:
在这里插入图片描述
可以看到这次master分支和dev分支合并后commit值的具体信息以及分支信息。



正文

假设 master分支合并的commit值的顺序是如下:

此时master分支的head指针指向了最新一次的commit值为a4829db.
我们使用 git reset --hard shal值 来使head指针指向commit值为d620a9。
在这里插入图片描述
可以看到maste分支上的commit值为 57e077—>d620a. 为什么会这样呢? 不应该是57e077—>167e96—>d620a9吗?怎么少了commit值为167e96了.
要想知道为什么会这样? 需要借助gitk来具体分析commit值的信息.

分析:

   如下图所示.
   1. 当sha1值为57e077时, 此时这个commit值所在的分支有dev,master分支. 同时这个commit值的child的commit值为167e96和d620a9。 

在这里插入图片描述

   如下图所示:
   1. 当sha1值为d620a9时,这个sha1值的所在分支为master分支, 以及这个sha1值的child的sha1值为a4829db, parent值为57e077.

在这里插入图片描述

如下图所示:
1. 当sha1值为167e96时,这个sha1值的所在分支为master分支,master分支.  以及这个sha1值的child的sha1值为a4829db, parent值为57e077

在这里插入图片描述

   如下图所示:
   1. 当sha1值为a4829时,这个sha1值的所在分支为master分支, 以及这个sha1值有两个parent值, 没有child值,  parent值为d620a9d,parent值为167e962

在这里插入图片描述

一个分支是多个commit值串联起来的,形成一个commit链, 我问一下大家. 多个commit值是遵循什么原则使得多个commit值有秩序的串联在一起呢? 答案就是根据 child值和parent值来确定多个commit值有秩序的串在一起。 一个commit值可以有多个parent值, 同时一个commit值也可以有多个child值。
根据图中可以很明确知道每个commit值的child值和parent值. 根据每个commit值的child值和parent值来确定上一个commit值和下一个commit值。

回到文章开始的地方。
我们使用 git reset --hard shal值 来使head指针指向commit值为d620a9, 可以看到maste分支上的commit值为 57e077—>d620a. 为什么会这样呢? 不应该是57e077—>167e96—>d620a9吗?怎么少了commit值为167e96了.

1. 当使用git reset --hard d620a9,  在master分支上来使head指针指向commit值为d620a9.  我们知道每个commit值要根据child值和parent值来确定commit值的顺序.  此时d620a9的parent值为57e077和child值为a4829db。此时就知道了d620a9的上一个commit值为57e077. 就可以看到以下内容:

在这里插入图片描述

2. 当使用git reset --hard  167e96, 在master分支上来使head指针指向commit值为167e96, 我们知道每个commit值要根据child值和parent值来确定commit值的顺序. 此时167e96的parent值为57e077,child值为a4829db, 此时就知道了167e96的上一个commit值为57e077。   


在这里插入图片描述
注: 在master分支上切换到 167e96时, 此时master分支上的commit链是: 57e077—>167e96. 同时在图中也可以看到还有dev分支。

大家有没有注意到的就是: 在master分支上切换, 不管你切换到167e96, 还是切换到d620a9, 前一个commit值总是为57e077. 跟之前的那个图有所不同。 根据gik显示的内容167e96的parent值为57e077, d620a9的parent值为57e077, 知道了不管你切换成哪个前一个commit都是为57e077. 两个commit值的parent值是同一个,有点像分支, 但是不是分支,因为都在master分支里. 不会在master分支里面又会有新的分支, 可以把它比作平行宇宙里的东西. 我来画个图。

画了个图, 应该是非常清楚了吧!!!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值