大家好,今天和大家聊聊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仓库的提交记录乱成一团,怎么办?的更多相关文章

  1. git log 查看提交记录

    git log 查看提交记录 1. git log 查看提交历史记录2. git log --oneline 或者 git log --pretty=oneline 以精简模式显示3. git log ...

  2. git log 查看提交记录,参数:

    git log 查看提交记录,参数:-n (n是一个正整数),查看最近n次的提交信息 $ git log -2 查看最近2次的提交历史记录 -- fileName fileName为任意文件名,查看指 ...

  3. 2.1获取Git仓库-2.2记录每次更新到仓库

    2.1 获取 Git 仓库 获取 Git 仓库通常有两种方式 将尚未进行版本控制的本地目录转换为 Git 仓库: 从其它服务器 克隆 一个已存在的 Git 仓库. 在已存在目录中初始化仓库 首先进入该 ...

  4. 如何向整个 Git 仓库补提交一个文件

    微软在 Reference Source 里开放了 .Net Framework 多个版本的源码.为了更方便地阅读这些源码,我们把每一个版本都下载下来后按顺序提交到 git 仓库中. 但是!!!居然忘 ...

  5. 在GIT中修改提交记录

    在SVN中,提交记录是无法修改的.比如说,当我们提交了某次修改后,发现该次提交中有错误时,只能将将补丁再次提交一遍.这样,就存在两次提交记录,没有保证提交的原子性. 在GIT中,由于提交是在本地进行的 ...

  6. git查看commit提交记录详情

    相关的命令: git log:查看所有的commit提交记录: git show: 查看提交的详情: 首先,需要通过git log打印所有commit记录,例如: 1.查看最新的commit:git ...

  7. Python - Git仓库忽略提交规则 & .gitignore配置

    Git 忽略文件提交的方法 有三种方法可以实现忽略Git中不想提交的文件. 在Git项目中定义 .gitignore 文件 这种方式通过在项目的某个文件夹下定义  .gitignore 文件,在该文件 ...

  8. 【重学Git】整理提交记录

    有时候我们在本分支做了一个很小的更改提交,其他分支想直接拿到这个更改提交,有没有一种不像merge或rebase这么正式的做法呢?也就是说:我仅仅是想获取其中一个小改变而已.cherry-pick就是 ...

  9. git修改已提交记录的注释

    已提交暂存区但还未提交远端仓库 命令:git commit --amend -m 已提交远端仓库 命令:git rebase 可以参考:http://www.cnblogs.com/dudu/p/47 ...

随机推荐

  1. 2016年 实验四  B2B模拟实验

    实验四  B2B模拟实验 [实验目的] ⑴.掌握B2B中供应商的供求信息发布.阿里商铺开设和订单交易等过程. ⑵.掌握B2B中采购商的采购信息的发布.交易洽谈.网上支付和收货等过程. [实验条件] ⑴ ...

  2. 2014年 实验二 B2C网上购物

    实验二 B2C网上购物 [实验目的] ⑴.熟悉虚拟银行和网上支付的应用 ⑵.熟悉并掌握消费者B2C网上购物和商家的销售处理 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网 (3) ...

  3. Jmeter之参数化函数助手__CSVRead

    1.在Tool->函数对话框中选择__CSVRead,2处填写测试用例的文档地址(测试用例要以csv格式保存),3处是测试用例中参数的位置,第一栏参数的CSV文件列号填0,第二栏参数的CSV文件 ...

  4. jmeter_03_鉴权

    jmeter权鉴* 1.配置节点 - 2.前置处理器 3.定时器 4.取样器 5.后置处理器(只在有结果的情况下执行) 6.断言(只在有结果的情况下执行) 7.监听器(只在有结果的情况下执行) 参数叠 ...

  5. docker设置http访问

    1 编辑配置文件    vim /etc/docker/daemon.json { "registry-mirrors": ["https://a4fyjv0u.mirr ...

  6. centos8平台使用pstree查看进程树

    一,pstree用途 Linux pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 systemd 这个基本行程为根 (root) 说明:centos6及更旧版本为 ...

  7. selenium基础--环境搭建

    下载地址 Chrome点击下载chrome的webdriver: http://chromedriver.storage.googleapis.com/index.html不同的Chrome的版本对应 ...

  8. Typora图片一键传——picgo使用兰空图床

    Typora picgo使用兰空图床 最近smms图床免费版的速度眼看着越来越慢,特别是到晚上,图片几乎是在原地打转,于是我想替换掉Typora中picgo默认使用的smms图床,网上的教程清一色地只 ...

  9. CSDN的Markdown编辑器实用技巧(傻瓜式教程)

    markdown编辑器被很多人声称是可以取代word的文字编辑器,其优点我们在这就不再过多赘述了,但对于一些初次接触的人来说,或多或少都有还些不适应,其主要原因在于一些常见的功能突然不知道怎么实现,所 ...

  10. Java9系列第8篇-Module模块化编程

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...