问题记录
问题概述:
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分支里面又会有新的分支, 可以把它比作平行宇宙里的东西. 我来画个图。
画了个图, 应该是非常清楚了吧!!!