Git仓库的提交记录乱成一团,怎么办?
大家好,今天和大家聊聊git当中一个非常好用的功能——区间选择,它可以帮我们处理看起来非常复杂的提交记录。从而帮助我们很快找到我们需要的内容。
如果大家有参与过多人协同的项目开发,比如十几个人甚至更多的成员的时候,会发现一些分支的记录非常的混乱,比如master。因为其中包含了太多的提交信息,比如各种分支的merge记录,以及线上bugfix等。这个时候使用区间选择就非常有必要,它会帮助我们过滤掉不需要的提交记录,快速找到我们想要的结果。
区间选择
关于区间选择我们之前在介绍rebase的时候曾经提到过一次:
git rebase --onto master feature bugFix
当我们执行这条命令之后,git会将在bugFix分支当中但是不在feature分支里的内容rebase到master分支。这其实就是一种区间选择,我们把两个分支之间的差集选择了出来。当然这是在rebase当中的应用,那么我们能不能把这种形式应用在日志搜索上呢?
当然是可以的,最常用指明区间的语法是双点。它的用法是两个英文句号,它可以让git选出在一个分支但是不在另外一个分支当中的提交,比如:
git log master..experiment
这个语句的含义就是筛选出在experiment当中但是不在master当中的提交。我们来看一张图,会更加地直观:

我们执行上面的命令之后,得到的结果就是C和D这两个节点的提交记录。
如果我们想要反其道而行之,想要获得在master,但是不在experiment,也就是查看我们在开发experiment这个分支的过程当中master进行了哪些改动,我们可以将前后两个分支名交换顺序。
git log experiment..master
这样我们得到的结果是E、F两个节点。
另外一个使用场景是在我们进行push之前进行检查,查看我们究竟做了哪些改动,哪些commit会被更新到远端。这个时候我们比较的是当前节点以及远程push的分支之间的差别,我们可以这样:
git log origin/master..HEAD
对于这个功能Git进行了优化, 我们可以省去最后的HEAD,git会默认使用HEAD代替留空的情况。
三点及多点
除了上面使用的双点语法之外,git当中还提供了三点以及多点的语法,我们先来说说三点的语法。
三点
其实三点的功能本质上和双点是一样的,可以认为是在双点的基础上做了一点优化,让我们使用起来更加方便。在真实的使用场景当中,我们往往既需要知道我们正在开发的feature带来的提交,也需要知道master后来进行的改动。这样的话,我们会需要执行git log两次,所以git提供了三点的语法,将两次执行压缩成了一次,通过使用三点语法,我们可以只需要执行一次就可以获得的结果。
git log master...experiment
当我们执行这个命令之后,git会展示这两个分支各自独有的提交,以上图举例,它的执行结果应该是C、D、E、F这四个节点。
但是这有一个问题,我们光看其实是不知道这四个节点分别属于哪个分支的,我们可以加上参数,--left-right,它会用箭头表明这些提交分别被哪个分支独有。
git log --left-right master...experiment
< F
< E
> D
> C
多点
有的时候我们的提交情况可能会比较复杂,可能有多个分支糅杂在一起,你可能未必确定某一个改动的源头。这个时候我们可能需要一个复杂的表达式才能把我们想要查看的提交记录表达清楚。
比如说我们现在有A、B、C三个分支,我们想要查看在A或和B当中,但是不在C当中的提交。我们可以这样写:
git log A B ^C
git log A B --not C
上面的两条语句都是可以的,第一条我们用^表示了not的意思,第二条比较直观,我们直接加上前缀来表示。这就是多点的用法,它支持我们定义多个来源,这样一些复杂的情况就会非常方便。git默认多个来源之间是或的关系,这也是非常符合实际的。大家可以思考一下这个问题。
多点同样也兼容双点的情况,双点操作有一个问题是我们经常会搞混比较的主体,这个时候我们完全可以使用多点的语法来代替。
git log A ^B
git log A --not B
掌握了多点和双点之后,我们就可以应付各种复杂场景下的log排查了,再加上之前介绍过的git show等功能,对于提升我们搜索git log的速度非常有帮助。这么几个命令掌握下来,使用起来的气质就不一样,会给你一种自己已经是技术大牛的感觉。
今天的文章就到这里,希望大家都能有这种感觉。如果还喜欢本文的话,请来个三连支持吧!(点赞、关注、转发)
{{uploading-image-952910.png(uploading...)}}
Git仓库的提交记录乱成一团,怎么办?的更多相关文章
- git log 查看提交记录
git log 查看提交记录 1. git log 查看提交历史记录2. git log --oneline 或者 git log --pretty=oneline 以精简模式显示3. git log ...
- git log 查看提交记录,参数:
git log 查看提交记录,参数:-n (n是一个正整数),查看最近n次的提交信息 $ git log -2 查看最近2次的提交历史记录 -- fileName fileName为任意文件名,查看指 ...
- 2.1获取Git仓库-2.2记录每次更新到仓库
2.1 获取 Git 仓库 获取 Git 仓库通常有两种方式 将尚未进行版本控制的本地目录转换为 Git 仓库: 从其它服务器 克隆 一个已存在的 Git 仓库. 在已存在目录中初始化仓库 首先进入该 ...
- 如何向整个 Git 仓库补提交一个文件
微软在 Reference Source 里开放了 .Net Framework 多个版本的源码.为了更方便地阅读这些源码,我们把每一个版本都下载下来后按顺序提交到 git 仓库中. 但是!!!居然忘 ...
- 在GIT中修改提交记录
在SVN中,提交记录是无法修改的.比如说,当我们提交了某次修改后,发现该次提交中有错误时,只能将将补丁再次提交一遍.这样,就存在两次提交记录,没有保证提交的原子性. 在GIT中,由于提交是在本地进行的 ...
- git查看commit提交记录详情
相关的命令: git log:查看所有的commit提交记录: git show: 查看提交的详情: 首先,需要通过git log打印所有commit记录,例如: 1.查看最新的commit:git ...
- Python - Git仓库忽略提交规则 & .gitignore配置
Git 忽略文件提交的方法 有三种方法可以实现忽略Git中不想提交的文件. 在Git项目中定义 .gitignore 文件 这种方式通过在项目的某个文件夹下定义 .gitignore 文件,在该文件 ...
- 【重学Git】整理提交记录
有时候我们在本分支做了一个很小的更改提交,其他分支想直接拿到这个更改提交,有没有一种不像merge或rebase这么正式的做法呢?也就是说:我仅仅是想获取其中一个小改变而已.cherry-pick就是 ...
- git修改已提交记录的注释
已提交暂存区但还未提交远端仓库 命令:git commit --amend -m 已提交远端仓库 命令:git rebase 可以参考:http://www.cnblogs.com/dudu/p/47 ...
随机推荐
- golang执行exec命令
创建对象: cmd, err := exec.Command("echo", "show me") 执行命令: cmd.Run() //Run 阻塞进程, ...
- DE2资源集锦
1.The School of Electrical and Computer Engineering (ECE) at the Georgia Institute of Technology:htt ...
- 【手摸手,带你搭建前后端分离商城系统】01 搭建基本代码框架、生成一个基本API
[手摸手,带你搭建前后端分离商城系统]01 搭建基本代码框架.生成一个基本API 通过本教程的学习,将带你从零搭建一个商城系统. 当然,这个商城涵盖了很多流行的知识点和技术核心 我可以学习到什么? S ...
- 在Linux命令行内的大小写转换
在编辑文本时大小写常常是需要注意的地方,大小写的转换是很枯燥而繁琐的工作,所幸,Linux 提供了很多能让这份工作变得容易的命令.接下来让我们看看都有哪些完成大小写转换的命令. tr 命令 tr (t ...
- 2017年 实验三 C2C模拟实验
[实验目的] 掌握网上购物的基本流程和C2C平台的运营 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网. (3).奥派电子商务应用软件 [知识准备] 本实验需要的理论知识:C2C ...
- ES6之数组
数组新增方法 map(可以理解为是映射,以一定规则修改数组每一项并返回全新数组) reduce(可以理解为是汇总,一堆出来一个) filter(可以理解为过滤,筛选的意思,以一定规则拿到符合的项并返回 ...
- JSON,数组根据字段多次分组
我们在前端开发过程中,遇到json对象,有时会需要多次分组.比如说,先按照是业务分组,然后再按照产品线分组,然后通过table或其他方式展示或操作 var obj1=[ { "demp&qu ...
- SE第一次作业
作业一.对软件工程的初步认识 下面是我对于软件工程的认识,结合自己的理解和课上听讲的内容 软件工程=软件+工程?软件工程是否就是简单的软件+工程呢?那么我们先来看下各自的概念. 那么什么叫软件呢,既然 ...
- UI设计学习总结
UI设计学习总结 平面设计基础 平面构成 三大构成:点线面 重复构成 相同,有规律的重复 近似构成 形状,大小,色彩,肌理相似 渐变构成 色彩逐渐变化 发射构成 通过一点向四周扩散犹如绽放的花朵 密集 ...
- 动态规划专题一:线性dp
第一篇博客随笔,被迫写的bushi 上课讲的动态规划入门,还是得总结一下吧 背包 01背包 背包有容量限制,每一件物品只能够取一件(这就是为什么j从V至v[i]循环的原因) 思路:f数组表示当前状态的 ...