【Git之窗】(三)几个最常用的命令解析

2024-08-26 21:18

本文主要是介绍【Git之窗】(三)几个最常用的命令解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    依稀记得上家公司入职的时候,电脑上安装了两个关于Git的软件,一个是"Git Bash",另一个是“Git Extention”,奈何用了三个月之后才顿悟,我一直在用客户端,然而Git的精髓确是命令行啊,就在刚才我画完了一张“我所理解的Git”的思维导图,发现绝大多数二级分支下都是Git的命令行,如图:

         这里暂且不对上图进行细致分析,只是为了说明命令行在git的使用过程中,才是王道!

    直到工作3个月后,我被调到了炫酷的“VRLe S”小组之后,才开始正式接触Git命令行,于是乎,我静静地卸载了Git Extention,开启了一条命令行的不归路。。。。。


    这里我按照每天工作的时间顺序,对于日常工作中最为常用的几条命令行总结:

    一、AM 9:00 上班

   (1)git pull origin master

    作为一名合格的程序员,每天晚上下班前提交自己“当天没问题”的代码,就应该像是“洗脸”、“刷牙”这样日常必备的事情一样,既然这样,同一个项目组内难免别人提交更新后的代码是对自己代码有影响的,于是乎,上班后干活前执行“git pull”命令也就是必须要做的事情了,当然,如果你开发过程中会有多个分支,比如小编在工作中就有三个分支,分别是“master”、“dev”、“htc”,建议执行git pull命令之前,先切换到git master上,别问我为啥?用久了你就知道了。


   (2)git status

    其实这个命令是该在执行git pull之前就要敲一敲的,我的感觉,git status就像是每次在桌面上点击右键刷新一样频繁。做其他事情之前都该去执行一下这个命令。

              

            如图,你发现了可能在执行git pull之前,有个东西昨天晚上忘记提交了,这就起到了这条命令的作用,同时“On branch dev”、“Changes not staged for commit”都告诉了你当前你应该去做哪些操作。


    二、AM 9:30~11:30 进入工作状态

   (1)git checkou 分支名

    比如我在和别人协同工作时,我的代码是不允许直接写在master上面的,至于为什么?1、master是要当做本地的“生成服务器”来看待的,怎么在“生产服务器”上写测试代码呢?2、提交代码之后,主线会出现“水管现象”(这个名字是我的组长的组长给起的,哈哈,一会儿讨论)。

    于是乎,我需要切换到我的开发分支,执行"git checkou dev",之后,就会显示“Switched to branch 'dev'”.如图:

                  

    表示我已经切换到我该工作的“dev”分支上面了。

    执行这个命令的前提是,你已经有了一个"dev"分支的存在,如果没有,可以执行“git checkout -b dev”,这句话表明我新建了一个分支叫做dev,同时切换过去。


   (2)git branch

    既然刚才我们讲分支切换,那么通过"git branch"命令,就能够对我当前的工作分支进行检查了,你可以了解到,你的本地仓库有多少个分支,以及当前分支是谁。

      

   (3)git rebase

    既然在master上拉去了最新代码,同时也切换到了dev开发分支,这个时候就要把最新代码同步过来啦,如图:

             


       (4)git clone

    上午上班到10点了,突然公司入职了一个“镁铝”程序员,我想公司里的男同胞们就该不淡定了,开始纷纷献殷勤,于是乎,小编开始帮她装git,之后要把组里的代码"download"下来啊,在git的世界里,这条命令叫做“git clone”,而非在做itoo时候SVN的"checkout",为啥?如图:

        看图中那个“框框”,是我在上家公司时候截的一幅图,使用“git clone”之后,你会发现,你负责的这个类,之前被叫做“扬威”、“yangwei”、“yanghe”这三个人修改过,而且是在180天之前创建的,分别在130天之前修改过一次,90天之前修改过一次……,是不是和SVN不一样呢?这样我们对于自己将要接手的新模块也知道了它的“前世与今生”,更加有利于我们去维护它。

    紧接着,就开始编程序了……


   (4)git add / git commit

    到了要吃午饭的时候了,上午的工作也完成了,那就提交到本地仓库吧,执行“git add -A”把修改的代码放到暂存区,执行“git status”,发现代码从红色变成了绿色,那就ok了.这个时候,可以执行“git commit -m '注释信息'”来将代码提交到本地仓库了。然后就和同事们吃饭去吧。



      三、PM 13:00 ~ PM14:00

   (1)git log / git lg2

    人到了这个时间点,状态往往比较懵,写代码的时候可能会将if(a == 1),写成if(a = 1),一旦提交了有问题的代码(有些错误能够瞒过编译器),你就需要git log这个命令了,但是git log有个缺点,页面布局很不清楚,这个时候,组长给我写了一行配置文件:(“~/.gitconfig”这个文件中)

## insert [alias]lg1 = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --alllg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' -10 --alllg = !"git lg1" 
       之后,git lg2就看到了这样的界面:

          

         看到了最近的一次提交记录是67seconds之前的提交,是我再htc分支上做的,因为比较懵逼提交了错代码,我要回退到之前的代码,就引入了下面的这个命令。


    (2)git reset

    参考git lg2界面中每一次提交的哈希码(Git以HashCode作为唯一标识),我将我的代码回退到旧的版本:“git reset 8891175”,如图:

             

    可见,我的“VRLeS/server”的代码已经回退到我之前的版本了,个人建议,这个操作,谨慎!!!


   (3)git diff

    2点这个时间点确实不适合敲代码啊,适合睡觉,因为你总会忘记自己究竟改了哪些代码,所以,有了这个命令就可以比较自己未add,未commit的代码,与已经commit的代码之间的差别了。(最近eclipse上没有用git,先不上图了)


    四、PM 14:00 ~ 18:00

   (1)git rebase / git merge

    这个时候,一天的工作基本差不多完成了,对于临时加入的分支中的代码,如果测试没有问题,就可以合并到master分支当中,如图:

                 

      

   (2)git rm

    一旦“特征分支”(暂时的分支)中的代码被合并到了master中,无用的分支也就可以删除掉了,其实我们可以先手动删除,再执行“git rm”命令,就可以成功删除“特征分支”了。

    之后执行git commit,把代码提交到本地仓库中。


   (3)git push

    这个步骤也是下班前的必备操作,执行push操作,把我们今天的成果推送到服务器上去吧!

             

          好了,下班吧,回去做饭了!

    That's all.

这篇关于【Git之窗】(三)几个最常用的命令解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109702

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat