git 命令行其实真的很好用

news2025/1/15 17:24:20

        

        使用命令行操作git,我觉得是最简单、最直接的方式,最开始使用git的时候特别喜欢这种方式。后来,就不再使用命令行,而是选择了其他可视化的工具,如idea自带的插件、sourceTree、TortoiseGit、GitKraken。发生的转变的原因很现实,同事说我很装逼(整得我很不好意思,不就命令敲得比较溜嘛,就这么埋汰我),另外就是特别容易忘记命令,没有可视化界面那么直观。但是我仍然认为,要想掌握好git的使用,应该先从命令行入手,因为可视化工具的本质,依然是命令行的包装,掌握好命令行,有助于加深理解每一步命令操作的变化,然后再转向各种可视化工具就像如鱼得水般简单了。

        关于git的命令行操作,主要包括有仓库操作、日常基本操作、分支操作、标签操作、冲突解决。

1. 仓库操作

        在git中所谓的仓库,就是存储代码的地方,即磁盘下的目录。因为目录的位置不同,又分为本地仓库和远程仓库。本地仓库,就是自己本地存储代码的根目录以及子目录。远程仓库,就是在服务端存储代码的一个目录。仓库的操作命令主要包括新建仓库、检出仓库、添加远程仓库、查看远程仓库、删除远程仓库、拉取远程仓库、推送远程仓库。

1.1 新建仓库

        主要用于工程的初始化的时候。在磁盘中新建一个工程目录,然后在工程根目录下执行下面的命令,然后本地仓库就建好了。

git init

1.2 检出仓库

        新入职的同事,一般都会给分配一个git账号和工程的git地址,然后在本地磁选择一个合适的目录,执行下列表命令,就可以把远程仓库的代码检出到本地了。此时,本地仓库和远程仓库默认是处于关联状态的。

git clone https://gitee.com/gaoxing27/git-study.git

1.3 查看远程仓库

        新建的本地仓库根目录下执行下列命令,执行结果是空的,说明此时本地仓库没有关联到远程仓库。

git remote -v

        如果本地仓库与远程仓库已关联,执行结果是这样的。

1.4 添加远程仓库

        在项目搭建最开始的时候,在本地新建一个本地仓库,另外需要在服务端新建一个远程仓库,此时远程仓库与本地仓库没有关联关系,本地仓库的代码文件无法推送到远程仓库,远程仓库的代码文件也无法拉取到本地,需要添加远程仓库与本地仓库的关联关系,命令如下:

git remote add origin https://gitee.com/gaoxing27/git-study.git

        origin是远程仓库的名称,可以随便取,后面的url是远程仓库的http地址。

1.5 删除远程仓库

        删除远程仓库即切断本地仓库与远程仓库的关联关系,平时极少用到,具体命令如下:

git remote rm origin

1.6 拉取远程仓库

        每次在开始修改文件或提交文件时,先从远程仓库拉取代码,确保本地仓库的代码是最新版本的,命令如下:

git pull origin dev

        origin是远程仓库的名称,dev是拉取代码所在的分支名称。

1.7 推送远程仓库

        完成开发任务后,代码提交到了本地仓库,需要推送代码到远程仓库,命令如下:

git push origin master

        origin 是远程仓库的名称,master是主分支的分支名称,这里也可以是其他分支名称。

2. 基本操作

2.1 查看状态

        查看文件的状态,这里我新增了一个文件,并修改了一个文件的内容,然后执行下面命令:

git status

        从执行结果来看,新增的example2.txt文件处于未受控状态(untracked files),example.txt文件被修改了(modified)。

2.2 查看变更内容

        在上面我修改了example.txt的内容,执行下面的命令可以知道变更前后内容对比,需要注意的是这个命令只能比较未add到暂存区的文件。

git diff example.txt

        从执行结果可以看到,执行后比执行前多了一行“add one line”

2.3 添加文件

        修改或新增一个文件后,执行下面命令添加文件到暂存区:

#添加指定文件到暂存区 
git add example2.txt 
#添加工作区所有变更的文件到暂存区 
git add .

2.4 提交文件

        执行下面命令,提交暂存区的所有文件到本地仓库,

git commit -m ‘xxxx’

        xxxx部分需要写上这次提交内容的描述

2.5 推送文件

        执行下面命令,把提交到本地仓库的代码文件推送到远程仓库

git push origin master

2.6 查看版本历史记录

        每次commit都会形成一个版本,一段经过计算生成的字符串作为版本号标识这次提交,执行下面命令可以查看版本的历史记录

git log

2.7 撤销代码

2.7.1 未add文件的撤销

git checkout hello.txt

2.7.2 已add文件的撤销

        对于已经add到暂存区的文件,要恢复到未修改前的版本,需要两步,命令如下:

#撤销add的操作,但是会保留已编辑的内容 
git reset HEAD hello.java 
#撤销已编辑的内容,恢复到未修改前的状态
git checkout hello.java

2.7.3 对已commit文件的撤销:

        文件被commit到本地仓库后会产生一个版本号,通过查看版本历史记录命令git log可以得到,然后执行下面命令撤销已提交的文件

git reset --hard xxxxx

        "xxxxx"是要撤销到指定版本的版本号。关于git reset命令的参数mixed、soft、hard这里需要特别说明一下:

        –mixed 默认是这种,代表撤销git add和git commit的操作,保留编辑器的代码;

        –soft代表撤销git commit,不撤销git add操作,同时保留编辑器的代码;

        –hard参数很暴力,直接撤销commit和add的操作,撤销所有改动的代码,当你决定用–hard参数的时候,就代表着你应该已经决定了放弃修改过的所有代码。

2.7.4 已push操作的撤销:

        对于一不小心把不想推送的代码推送到了远程仓库,撤销分为两步,第一步,把本地仓库的文件撤销到指定版本;第二步用本撤销后的文件push到远程仓库,命令如下

#本地代码撤销到指定的版本 
git reset --hard xxxxx 
#把已撤销的本地操作强制推送到远程仓库,把一不小心push到远程仓库的操作撤销 
git push --force origin master

        使用git reset这种方式,撤销操作在本地、远程仓库都不会留下记录,也就是你不说,很难发现你推送错了代码然后又悄悄撤销了。另外还有一种方式git revert,如下:

#回退到指定版本 
git revert xxxxx 
#手动合并代码,保留下撤销前的内容,然后再正常的add、commit、push 
git add hello.txt 
git commit -m '撤销错误提交的内容' 
git push origin master

        xxxxx回退到指定版本的版本号。与git reset不同的是,revert之前的提交记录会保留,revert会再生成一次新的commit来撤销之前的psuh的内容,简单理解就是本地仓库的代码先撤销,然后把一不小心不想push的内容删除,再次提交。git reset --hard比较狠,不留痕迹,全部回退到指定版本。如果当前版本与回退版本之间,除了自己提交的版本,还有其他人提交的版本,那么其他人提交的版本也会悄无声息被你干掉,项目组里如果经常有人莫明其妙的叫嚷:为什么我的代码莫明其妙被合丢了,大概率是有人这么干了,所以git reset --hard极度危险,当慎用呀,推荐使用git revert,一切都有记录,一切都掌控之中。

2.8 撤销代码后悔了

        如果撤销完,又后悔了,想向前再恢复回去,但是找不到之前的版本历史记录了,下面的命令可以查询到回退到指定版本后往前几次的版本历史记录。找到向前的版本历史记录后,再向前回退和向后回退是一样的,回退和提交的过程实际就像一个指针,向前或向后的移动,head通常就是这个指针,指向当前版本。

git reflog

3. 分支操作

        之前的所有操作都是在master分支,也就是主分支上进行的,分支操作的命令主要是用于创建分支、切换分支、查看分支、合并分支这些操作。

3.1 创建分支

3.1.1 创建本地分支

#创建本地分支,但是不会切换到创建分支上,dev是分支的名称 
git branch dev 
#创建本地分支,并切换到创建的分支上,dev2是分支的名称; 如果分支已创建,则切换到分支上 
git checkout -b dev2

3.1.2 创建远程分支

        创建远程分支需要先在本仓库创建本地分支,然后推送到远程仓库,远程的分支就创建好了

git push origin dev

3.2 查看分支

3.2.1 查看所有分支:

git branch -a

3.2.2 查看远程所有分支

git branch -r

3.2.3 查看本地所有分支

git branch

3.3 切换分支

git checkout dev2

3.4 合并分支

        把另一个分支上的内容与当前分支进行合并,合并后会生成一次合并的提交记录。

#当前分支是dev2,合并dev分支内容到dev2 
git merge dev 
#推送合并后dev2分支内容到远程仓库 
git push origin dev2

3.5 删除分支

#删除本地分支 
git branch -d dev 
#删除远程分支,origin为远程仓库名称,dev为远程分支名称 
git push origin :dev

4. 标签操作

        打个比方说一下什么是标签,每一次的代码提交,都会生成一个版本号,每个版本号之间连接起来就会形成一条线,只要不断有新提交生成,这条线就会一直延伸下去,打一个标签(tag)好比在这条线作了一个标记。这个标记有什么用呢?项目在迭代开发的时候,每开发完一个版本,就在分支上打一个tag,然后运维组依据这个tag发布测试环境、灰度环境,由测试组进行测试验证,开发组继续在原来的分支上进行迭代开发,提交内容,彼此之间不受影响。

4.1 查看标签

git tag

4.2 创建标签

#在本地打一个标签 
git tag dev_20221116_v1 
#推送标签到远程仓库 
git push origin dev_20221116_v1

4.3 删除标签

#删除本地仓库上的标签 
git tag -d dev_20221116_v1 
#删除远程仓库上的标签 
git push origin :dev_20221116_v1

4.4 查看远程标签

git log

5 冲突解决

5.1 冲突原因

        代码冲突其实很容易理解,没有那么麻烦,简单来说就是同一个文件的同一个位置都修改了,且内容不同,会产生冲突。举一个例了,在文件a第十行,你添加了一个“.”,另外一个同事在文件a的第十行添加了一个“#”,并且早于你提交远程仓库,你再提交的时候,就会发生冲突。这里需要注意的是,所谓的同一个位置可能是一行代码、也可能是几行。

5.2 合并冲突

        远程仓库文件的内容

        下面就是发生冲突的文件内容,head是指向当前版本,即本地仓库当前版本小强在文件的第2行提交了“小强提交了edf”,“=======”后面的内容是远程仓库的相同位置的内容。

        解决冲突很简单,假如经过确认两次提交都需要保留,那么手工合并冲突,保留两次提交内容,然后再提交推送到远程仓库即可。

        理解冲突的原因后,解决冲突的过程无非需要多加小心一些,要确认清楚冲突的部分哪些是需要保留,哪些不需要保留,然后根据实际情况正常合并处理即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼

💡 作者:韩信子ShowMeAI 📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42 📘 自然语言处理实战系列:https://www.showmeai.tech/tutorials/45 📘 计算机视觉实战系列:h…

Jenkins 10 问 10 答,你想知道都在这

大家好啊,我是大田。 今天汇总一下近几周关于 Jenkins 问题。 1、如何安装 Jenkins? 答:一步一步教你安装部署 Jenkins,不信你安不上 2、忘记登录密码? 答:Jenkins 忘记登录密码解决办法 3、jenkins中缺少…

基于 IDEA 搭建 RocketMQ-4.6 源码环境

RocketMQ 架构 源码搭建前, 需要理解 RocketMQ 的四个重要组件, 以及 RocketMQ 的工作流程: NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。 Broker部署相对复杂,Broker分为Master…

Java基础之《undertow容器》

一、什么是undertow 1、undertow是springboot默认支持的三种servlet容器之一。 tomcat、jetty、undertow 2、undertow怎么读 under-tow 3、undertow是RedHat(红帽公司)的开源产品,采用java开发,是一款灵活、高性能的web服务器&…

大学生游戏静态HTML网页设计-(北京冬奥会12页 带js 带视频 轮播图)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | HTML期末大学生网页设计作业,Web大学生网页 HTML:结构 CSS:样式 在操作方面上运用了html5和css3, 采用…

stack容器、queue容器(20221116)

一、stack容器 1、基本概念 先进后出的数据结构,只有一个出口(栈顶)。 栈不允许有遍历行为,可以判断是否为空(empty),也可以知道其元素个数(size) 2、常用接口 构造函数: stac…

初始MySQL

目录 一、什么是数据库 二、SQL分类 三、库的操作 四、表的操作 五、数据类型 六、表的约束 什么是数据库 存储数据用文件就可以了,为什么还要有数据库? 文件保存数据有以下几个缺点: 文件的安全性问题文件不利于数据查询和管理 文件…

电脑视频怎么录制?好用的电脑录屏方法

在日常使用电脑的时候,很多小伙伴经常会遇到需要录制电脑视频的时候。但网上各种眼花缭乱的电脑录屏方法,很多小伙伴看了表示自己根本没有学会。今天就给大家分享2个简单好用的电脑录屏方法,看完后轻松掌握电脑录屏。 一.使用Wind…

主成分分析法在图像压缩和重建中的应用研究-含Matlab代码

目录一、引言二、主成分分析法概念及性质2.1 概念2.2 性质三、计算步骤3.1 计算相关系数矩阵3.2 计算特征值与特征向量3.3 计算主成分贡献率及累计贡献率3.4 计算主成分载荷3.5 各主成分的得分四、图像压缩与重建实验分析五、参考文献六、Matlab代码获取一、引言 主成分分析法…

【附源码】Python计算机毕业设计网上购物平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

最火后台管理系统 RuoYi 项目探秘,之二

上篇中,我们初步观察了 RuoYi 的项目结构,并在最后实际运行起了项目。我们也发现了作者不好的代码习惯,作为反例,我们应该要养成良好的编码习惯。本篇开始,我们会按照 Web 界面逐一对具体子项目的实现的功能进行探秘。…

Qt使用7z压缩和解压示例(支持文件夹递归、多文件不同位置)

1,简介 Qt自带的压缩处理类功能不太完善,也不支持中文路径。 这是我封装好的一个Qt调用7z处理压缩解压的工具类 ZipAPI,提供了几个简单易用的接口。 写压缩解压代码从此非常方便快捷! 支持中文路径,支持常规的压缩解…

Cell:水平基因转移在昆虫中广泛存在,增强鳞翅目雄性昆虫求偶行为

期刊:Cell 影响因子:66.85 发表时间:2022年8月 一、研究背景 昆虫起源于约4.8亿年前,是地球上最繁盛的动物类群,已被描述种超过100万,占所有动物物种50%以上。这个古老的动物类群在…

插画、插图网站,免费(商用)

本期分享5个高质量插画网站,免费可商用,设计必备,建议收藏!1、Undraw https://undraw.co/illustrationsUndraw是一个扁平风格插画图库,里面有大量的插画,可以支持在线更改配色,网站提供免费下载…

【JavaSE】类和对象(下)(访问限定符 包的概念 导入包中的类 自定义包 包的访问权限控制举例 常见的包 实例内部类 静态内部类 局部内部类 对象的打印)

文章目录六、 封装6.1 封装的概念6.2 访问限定符6.3 封装扩展之包6.3.1 包的概念6.3.2 导入包中的类6.3.3 自定义包6.3.4 包的访问权限控制举例6.3.5 常见的包七、内部类7.1 内部类7.1.1 实例内部类7.1.2 静态内部类7.2 局部内部类7.3 匿名内部类八、对象的打印六、 封装 6.1 …

人工智能-线性回归2--房价预测、欠拟合过拟合、正则化、模型保存加载

7,案例:波士顿房价预测 回归性能评估MSE from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression,SGDRegressor from sklearn.meyrics import mean_squa…

详解PHP解决swoole守护进程Redis假死 ,mysql断线重连问题

详解PHP解决swoole守护进程Redis假死 ,mysql断线重连问题最近公司有个项目,要举办一个线上活动,我这边负责提供接口记录用户访问记录,与操作记录,由于活动参与人数可能比较多,为了不影响正常业务运行&#…

安全性归约(游戏)

文章目录基于游戏的安全性定义归约中的概率关系某事件发生某事件不发生互斥事件基于游戏的安全性定义 在将攻击 Γ\GammaΓ 的算法 A′AA′ 归约到攻击 Π\PiΠ 的算法 AAA 时, 让 A′AA′ 根据 ChΓCh_\GammaChΓ​ 提供的信息,为 AAA 模拟出同分布的 …

股票自动下单接口够接入多种股票数据源吗?

很多的股票交易接口在原先只能接入行情的CTP程序,那么股票自动下单接口现在可以通过openctp提供的CTPAPI,可以接入到多种多样的股票数据源!但是目前由于大多的股票交易接口是受到监管限制的就很难接入实盘,那么股票自动下单接口通…

知心世界姐王瑞平:谷传民与大衣哥朱之文是沟通问题不是人品问题

大衣哥和谷传民的官司走到现在,互联网上面也出现了两大阵营对垒,一方面是大衣哥的粉丝,旗帜鲜明地支持自己的偶像,另一大阵营的人,则一心一意支持谷传民。虽然每个阵营都有自己的道理,但是毕竟都太过极端&a…