Git investigation 1

Submitted by Lizhe on Tue, 07/21/2020 - 03:05

这里我创建一个新仓库

然后分别提交3次,依次提交 file1、file2 和 file3

20200721110635

 

bae637edfecf634185f6dc3cf51d251a8d27aad0 file1 第一次提交

39defcb06a20910ee01cf2dd688b6d2b1ce0a411 file2 第二次提交

f8f10774bbb0c7faab1190bd173e763b0cca34cc file3 第三次提交

显示所有提交
git log

 

查看bae637edfecf634185f6dc3cf51d251a8d27aad0和最后一次提交有什么不一样
git log HEAD...bae637edfecf634185f6dc3cf51d251a8d27aad0

这里结果是 file3 , 也就是只有一个文件不一样

 

在bae637edfecf634185f6dc3cf51d251a8d27aad0.. 之后一直到最新,提交了哪些commit
git log bae637edfecf634185f6dc3cf51d251a8d27aad0..

这里结果是 file2 和 file3 ,一共两次 commit

20200721111305

git 使用两个点 .. 比较的时候 和 三个点 最大的区别在于, 三点是简单粗暴比不同,两个点是有顺序的,它列出的是,两个点右边比左边多的提交

lizhedeMacBook-Pro:gittest lizhe$ git log f8f10774bbb0c7faab1190bd173e763b0cca34cc..bae637edfecf634185f6dc3cf51d251a8d27aad0

lizhedeMacBook-Pro:gittest lizhe$ git log bae637edfecf634185f6dc3cf51d251a8d27aad0..f8f10774bbb0c7faab1190bd173e763b0cca34cc

20200721121653

 


 

这里看一下 tag 和 code merge 的情况,我们将 3个 commit 扩展到 5个,然后 分别打上tag

为了区分,这里 前 3个 tag 是 tag 1~3 ,后面两个tag 是  file 4~5

20200723065150

 

然后我们模拟一个 merge 动作,

用户2 从 tag2 处新建了一个 branch , 叫 b2

用户3 从 tag3 处新建了一个 branch , 叫 b3

20200723065518

然后我们模拟2个用户,分别进行修改,然后checkin,需要切换分支

git fetch && git checkout b2

修改如下

b2 上

20200723070439

b3 上

20200723070949

 

下图中的

绿色 -> 分支3 ( tag3 到 b3 那段 )

橘红色 -> 分支2 ( tag2 到 b2 那段 )

 

20200723070917

 

此时,如果你查看最下的 tag1 和 最上的 b3 中间的 diff , 你会得到 4 次提交历史记录,分别是 

tag1、tag2、tag3 和 b3,并不是你在图中看到的所有 提交记录

20200724101609

 


 

为了再复杂一点,我在 file4 上也打一个新的 branch 并且做了修改

20200724111516

 

tag1 到 b4 的差异

20200724125541

 


 

在b3上再做一次提交,这样 b3 上会有两次提交记录,然后将 b3 merge 回 master

20200724015110

20200724015031

20200724015336

 

20200724021318

 

给最后结果 打一个tag 叫 mergedb3 ,然后看一下提交历史,b3内部果然有2个commit

20200724021608

 

 

实际上这里 mergedb3 持有的所有文件 = tag3和b3共有的 +  b3 branch ( 包含了两次提交 )+ master 的 file4 和 file5

下图中,

tag3和b3共有的是file1、file2、file3 ,

b3 带来的是updated 那两次

master 带来的是 file4 和 file5

 

第二条命令对比了 b3 两次提交之后 和 merged master 之后的区别,可以看到仅仅是 master 的 两个文件 4 和 5

不过两个命令行都返回了 merge 那次commit,merge commit 带有特殊信息 Merge: afce668 4d66477

20200724024831