专栏首页CDN及云技术分享git问题场景和log颜色查看
原创

git问题场景和log颜色查看

一、问题场景

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

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

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

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

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

      --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的版本记录图

2.2 版本线交叉上的形状

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

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

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

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

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

图4 修改的tag

还有branch

图5. 修改的branch

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高效协同开发

    假设服务机器开通sambas服务端口,并且windows防火墙允许访问。这时候可以在windows打开网盘一样,打开sambas共享的服务器文件夹,把代码工程放...

    mariolu
  • 探秘git隐藏文件夹

    分布式的版本管理同svn集中式版本管理不同的是,本地维护一个版本库,所以不需要联网服务器就可以做开发版本管理。每个开发者对自己仓库拥有写权限,而对其他所有人仓库...

    mariolu
  • 记一次mysql事务隔离级别踩坑

    同样的条件 ,   第 1 次和第 2 次读出来的记录数(强调的是记录数,而不是记录本身,因为读锁的锁粒度是记录自身,而不是整张表)不一样。

    mariolu
  • 终于有人把 Git 分支讲清楚了!

    从本质上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。

    DevOps时代
  • 适合初学者提升的Git技能

    你知道git工作流的基本知识,熟悉一些基本的命令,如add,commit,push,pull,那么这篇文章可能适合你。这篇文章主要关注日常git使用改进,修复一...

    硬核编程
  • Hexo 博客部署到腾讯云教程

    行走少年郎
  • Git 工作流的正确打开方式

    前言 一直在使用git做版本控制,也一直工作很顺利,直到和别人发生冲突的时候。这才注意到git 工作流并不是那么简单。比如,之前遇到的清理历史。百度到的资料很...

    Ryan-Miao
  • Git 从入门到精通,这篇包教包会!

    集中化的版本控制系统,诸如 CVS,Subversion 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器...

    java思维导图
  • 10 个迅速提升你 Git 水平的提示

    在这篇文章中,我们试图探索怎样有效的管理你的时间和充分的使用Git提供的功能。 注:本文中,一些命令包含了方括号中的部分内容(例如:git add -p [fi...

    小小科
  • git 入门教程之冲突合并 原

    如果足够幸运的话,团队成员互不影响,彼此相安无事,大家各自基于 master 分支的某个 commit 创建自己的分支,平时在分支上独立工作,等到一段时间后再合...

    雪之梦技术驿站

扫码关注云+社区

领取腾讯云代金券