git问题场景和log颜色查看

2019-07-21 22:07:16 浏览数 (1)

一、问题场景

正常我们使用git,比如git add ,git commit , git push这些完成个人的代码暂存、修改、提交和推送操作。

在多人协作下,你提交的文件修改可能对方也在修改同一个文件,并且比你先修改完先push到远程。这时候你不得不pull下别人的分支,在重新push,如果有confilict,还需要手动修改冲突文件,该是你的保留,不想要的删除,最终再提交。

这些是最基本的场景,但是你有没有遇到过以下棘手的场景:

1.1、别的同事提交了master(或者dev分支),但是下一个临时发布版本需要暂时剔除这个代码,并且需要合并你自己负责的那部分代码提交。

当然你可以说先找到别的同事提交之前的那个版本,然后在branch一个分支,merge上你的代码。但是问题是如果master已经提交了很多个commit,而别的同事提交的那个暂时不想要(比如说他提交的是一个大功能模块,上线可可能需要比较谨慎,所以这次不发表),其他的还是要一起发布。

代码语言:javascript复制
      --C----D----          some commit must kick off
     /            <merge>
----A----B----C----D----E   master
     
      --O----P----Q         my branch
                    
                     --B----E   release brance

这个时候如果想要制造出像release branch那样子的提交。可以这么做:

可以先从my branch中rebase一个release branche。然后git cherry-pick B, git cherry-pick E即可。其中B和E是commit log md5串。这个commit id可以通过git log查看,这个commit id是一串很长的字符串,但是其实只需要前面几个字母组成的字符串,只要这个字符串是能让git联想到唯一的commit id就可以。需要注意的是cherry-pick保持原来的B和E提交顺序。

和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,因为Git是分布式的版本控制系统,多人在同一个版本库里工作,如果都用1,2,3……作为版本号,那肯定冲突了。

二、学会查看,git log的线条、形状和颜色

git初学者或者从svn刚切换到git的使用者,一开始就敲复杂的命令可能会有点困难。这时候如果使用跟tortoise svn类似的git软件,会比较好上手git。

git log日志每条记录有三栏,第一栏是分支图,第二栏是代表提交是否修改、新增和删除文件。第三轮是git分支(或tag)加上本commit的提交日志。

2.1. git上的版本线

  • 每一条版本线代表着一个分支。
  • 还有有些颜色会中断,然后在另外一个地方继续,这里其实已经是不同的分支,也就是git log的颜色同样,如果遇到分支,或者断续 可能代表的是另一个分支
  • 这里有分叉,有断线再接上,同一个颜色(绿色)代表了5个不同的分支。
图1. 某个repo的版本记录图图1. 某个repo的版本记录图

2.2 版本线交叉上的形状

四方块代表merge,圆形代表一个提交。每条横线记录代表着一个事件。形状记录了是什么事件,merge或者哪个版本提交commit事件。

git log的Walk Behaviour里面有一堆按钮:注意下如果只是想看分支间的关系,可以把compressed graph,而如果还想看清每个分支的提交,就把这个按钮关掉。

图2. 简略版本(多次提交被只显示一条)图2. 简略版本(多次提交被只显示一条)
图3. 完整的提交图3. 完整的提交

2.3 提交记录的版本/分支信息

由于log显示的是所有分支,所有需要在第三栏,messege那栏有显示当次更改涉及的分支或者tag。git log上有tag比如这种,

图4 修改的tag图4 修改的tag

还有branch

图5. 修改的branch图5. 修改的branch

0 人点赞