Git 基本操作之Git GUI界面和git命令行如何选择
1. 为啥推荐使用git命令行
我发现公司有很多的同事都喜欢使用git的GUI界面工具,喜欢鼠标点点点就完成了代码的提交,这种方式的确是比较简单便捷,但是却存在风险。先上一个事故给大家醒醒脑。
VScode Git 界面操作引发的惨案
上面的惨案是VSCode的一个用户通过Git界面执行了git init 后,无意间按了clean all按钮,这个按钮封装的命令应该是git clean -d -f 命令,会把所有的未加入git的文件删除。因为这个用户可能是git小白,不明白clean在git的含义,导致他的项目中5000多个文件全部被删除了。他还打算去Windows的垃圾箱中恢复那5000多个文件,但是现实是残酷的,git clean 是不会调用垃圾箱的API的,所以这个用户永久的失去了他的项目,所以他发了很多和FUCK xxx。
其实推荐使用git命令行的理由主要有三个:
(1)Git命令行的功能强大,GUI界面只是封装了一小部分
(2)先学好命令行后,使用任何的GUI工具都是如鱼得水
(3)Git命令行的很多操作可以优化,效率比GUI快很多
注意:如果你对git命令已经很熟悉了,使用Git命令行还是界面工具其实都差不多,不需要纠结该用哪一个不该用哪一个,但是假如你是Git小白,建议从Git命令学起
知道了学习Git命令行的必要性,下面让我们一起看下git的基本命令操作吧,这里做一个抛砖引玉的作用,欢迎大家一起讨论git命令的妙用
2. Git命令的基本操作讲解
2.1 Git 命令的仓库操作
仓库就是存储项目代码的地方,即我们计算机磁盘下的目录。git仓库分为本地仓库和远程仓库。本地仓库是指本地存储代码的根目录以及子目录,远程仓库是指放在服务器端存储代码的一个目录。仓库相关的命令如下:
2.1.1 新建本地仓库
主要是用于工程初始化,在磁盘上新建一个工程目录,然后在根目录下执行下面的目录然后本地仓库就建好了
git init
2.1.2 检出仓库
当我们需要加入一个新项目的时候,一般都会获得新项目的管理员分配的git仓库地址,然后我们可以在本地选择一个合适的目录,执行下面的命令,就可以把远程仓库的代码下载到本地了。此时本地仓库和远程仓库默认是关联的。
git clone https://github.com/magnusja/libaums.git
要下载github上的仓库也可以使用这种方式
在github的仓库界面拿到仓库的链接后,执行git clone 命令下载仓库。
2.1.3 查看远程仓库
假设我们的同事加入了我们的项目,想拉代码了解下项目,此时刚好项目负责人不在,我们又不想去浏览器记录上去进到服务器里查看我们项目的git链接,但我们又需要马上拿到这个git链接给到同事,这时我们就可以执行下面的命令:
git remote -v
如果执行结果是空的,证明你的本地仓库没有和远程仓库关联。成功的话结果如下
2.1.4 添加/删除远程仓库
在项目刚开始搭建的时候,我们在本地建立了一个本地仓库,另外需要在服务端新建一个远程仓库,此时远程仓库与本地仓库没有关联关系,我们本地仓库的文件无法推送到远程仓库,远程仓库的代码文件也无法被拉取到本地,这时需要执行下面的命令去添加本地仓库和远程仓库的关联关系
git remote add origin https://xxxxx/xxx.git
这里的origin是远程仓库的名称,可以自己随便取,后面的url是远程仓库的http地址
如果我们想切断与远程仓库的关联关系,也就是删除远程仓库,平时极少用到,命令如下:
git remote rm origin
2.1.5 拉取/推送远程仓库
每次在开始修改文件或者提交文件的时候,需要先从远程仓库中拉取最新的代码,确保本地仓库的代码是最新的,命令如下:
git pull origin dev
origin 是远程仓库的名称,dev是拉取代码所在的分支名称
我们开发完代码后,将代码提交到本地的仓库,这时需要我们推送到远程仓库,命令如下:
git push origin master
origin 是远程仓库的名称,master是代码主分支名称,也可以是其他分支的名称
2.2 Git 命令的基本操作
3.2.1 查看文件的状态
当我们修改了本地仓库中的文件后,可以使用下面的命令查看我们修改的文件
git status
当然我们可以加参数来看具体的操作
比如执行: git status -s
在文件的前面会出现AM的字样,这个意思是本次的变更包含增加(A)和修改操作(M)
3.2.2 查看变更内容
当我们修改了文件的内容后,我们可以通过git命令查看变更的内容,命令如下
git diff #变更的文件
需要注意的是,git diff 命令只能比较未被添加到暂存区的内容。查看 git add过的内容 git diff --cached
3.2.3 添加/提交/推送文件
当我们修改或者新增一个文件后,我们可以执行项目的命令添加到文件的暂存区
#添加指定文件到暂存区
git add xxx.txt
#添加所有文件到暂存区
git add .
git add -A
我们执行完git add 命令后,我们的文件被添加到了暂存区,接下来就是执行提交命令将我们的修改提交到本地仓库
# xxx 是本次提交的描述信息
git commit -m 'xxxxx'
当文件被提交到本地的代码仓库后,其实我们的代码还是有丢失的风险,因为我们的机器如果坏了就难受了,所以我们需要把代码推送到远程仓库,执行下面命令:
git push origin master
3.2.4 撤销修改
当文件没有执行git add 命令的时候,我们如果想要撤销我们的修改,我们可以执行下面的命令:
#撤销已编辑的内容,恢复到未修改前的状态
git checkout xxx.txt
假设我们的代码已经提交到了暂存区,想要恢复到以前的版本,命令如下
#撤销add操作,但是会保留已编辑的内容
git reset HEAD xxx.txt
如果我们的代码已经提交到了本地仓库,这时本地仓库会产生一个版本号,我们可以使用版本号撤销已经提交的代码
git reset --mixed 版本号
git reset命令的参数有:mixed、soft、hard:
–mixed 默认是这种,代表撤销git add和git commit的操作,保留编辑器的代码;
–soft代表撤销git commit,不撤销git add操作,同时保留编辑器的代码;
–hard参数很暴力,直接撤销commit和add的操作,撤销所有改动的代码,当你决定用 --hard参数的时候,就代表着你应该已经决定了放弃修改过的所有代码。
如果你的代码已经push到了远程仓库,这时候需要我们先把本地仓库的文件撤销到指定版本,然后再把撤销后的版本再push到远程仓库,这里的操作比较危险,因为可能会涉及到别人的修改,所以这部分我就不讲解了,感兴趣的可以自己百度
当代码撤销完后我们后悔了,想恢复到之前的版本,但是我们又找不到版本历史变更记录了,这时候不要慌,可以使用下面的命令试试:
git reflog
执行这个命令后会列出最近的代码记录,然后找到对应提交的版本号,做下cherry-pick或者git reset 就可以了。
2.3 Git 命令的分支操作
之前的所有操作都是在master分支,也就是主分支上进行的,分支操作的命令主要是用于创建分支、切换分支、查看分支、合并分支这些操作。
2.3.1 创建本地分支
#创建本地分支,但是不会切换到创建分支上,branch_name是分支的名称
git branch branch_name
#创建本地分支,并切换到创建的分支上,branch_name是分支的名称; 如果分支已创建,则切换到分支上
git checkout -b branch_name
2.3.2 创建远程分支
创建远程分支需要先在本仓库创建本地分支,然后推送到远程仓库,远程的分支就创建好了
git push origin branch_name
2.3.3 查看所有分支
git branch -a
2.3.4 查看远程所有分支
git branch -r
2.3.5 查看本地所有分支
git branch
2.3.6 切换分支
git checkout branch_name
2.3.7 合并分支
把另一个分支上的内容与当前分支进行合并,合并后会生成一次合并的提交记录。
#当前分支是dev2,合并dev分支内容到dev2 git merge dev
#推送合并后dev2分支内容到远程仓库
git push origin dev2
3.3.8 删除分支
#删除本地分支
git branch -d dev
#删除远程分支,origin为远程仓库名称,dev为远程分支名称
git push origin :dev
2.4 Git 命令的标签操作
我们每一次的代码提交,都会生成一个版本号,每个版本号之间连接起来就会形成一条线,只要不断有新提交生成,这条线就会一直延伸下去,打一个标签(tag)好比在这条线作了一个标记。项目在迭代开发的时候,每开发完一个版本,就在分支上打一个tag,然后运维组依据这个tag发布测试环境、灰度环境,由测试组进行测试验证,开发组继续在原来的分支上进行迭代开发,提交内容,彼此之间不受影响。
2.4.1 查看标签
git tag
2.4.2 创建标签
#在本地打一个标签
git tag TAG_20230214
#推送标签到远程仓库
git push origin TAG_20230214
2.4.3 删除标签
#删除本地仓库上的标签
git tag -d TAG_20230214
#删除远程仓库上的标签
git push origin:TAG_20230214
2.5 Git 命令之冲突解决
2.5.1 为啥会产生冲突
代码冲突简单来说就是同一个文件的同一个位置都修改了,且内容不同,会产生冲突。例如,在文件A第十行,你添加了一个“hello world”,另外一个同事在文件A的第十行添加了一个“helloworld”,并且早于你提交远程仓库,你再提交的时候,就会发生冲突。这里需要注意的是,所谓的同一个位置可能是一行代码、也可能是几行。
2.5.2 解决冲突
解决冲突就是决定你和同事修改的代码是留你自己的代码还是留同事的代码,还是你们的代码需要共同保留,做一些局部的删减,这就是解决冲突的过程。解决完后将你的代码add到暂存区,然后执行
git merge --continue
然后提交就可以了,如果是cherry-pick执行
git cherry-pick --continue
如果要放弃你的修改,则执行
git merge/cherry-pick --abort
3.Android Studio Git插件搭配git命令行提效
3.1 查看git的提交记录
3.2 查看提交的人
3.3 快速查看对比本地的修改和远程分支的差异
等等,我比较推荐使用Git命令行和Android Studio的Git插件搭配使用。效率会提升很多
总结
Git命令其实还有很多,无法一一穷尽,我们用命令行不是为了装逼,而是为了更安全、更高效的进行项目开发。由于是团队开发,所以我们在合并代码和提交代码时都需要更加小心,否则因为你的提交干掉了别人的代码,这会让别人的辛苦变成一场空;如果学好git命令行,这些问题都能很好的避免。而且命令行学好了,操作图形界面更是如鱼得水。在工作中我们可能会遇到各种各样提交代码的问题,这时候我们去学习好Git命令行,能快速的解决这类问题。将时间用在更重要的事情上。
相关文章:

Git 基本操作之Git GUI界面和git命令行如何选择
1. 为啥推荐使用git命令行 我发现公司有很多的同事都喜欢使用git的GUI界面工具,喜欢鼠标点点点就完成了代码的提交,这种方式的确是比较简单便捷,但是却存在风险。先上一个事故给大家醒醒脑。 VScode Git 界面操作引发的惨案 上面的惨案是VS…...

Python编程 动态爱心
作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.所用库 1.random简介 2.math 简介 3.tkinter库的简介 二.实际图 三.…...
JavaScript :基础语法
位置: HTML 中的 Javascript 脚本代码必须位于 <script> 与 </script> 标签之间。 JavaScript 输出方式 window.alert() 弹出警告框。document.write() 将内容写到 HTML 文档中。innerHTML 写入到 HTML 元素。console.log() 写入到浏览器的控制台。 …...
buu [AFCTF2018]Single 1
题目描述: Jmqrida rva Lfmz (JRL) eu m uqajemf seny xl enlxdomrexn uajiderc jxoqarerexnu. Rvada mda rvdaa jxooxn rcqau xl JRLu: Paxqmdyc, Mrrmjs-Yalanja mny oekay. Paxqmdyc-urcfa JRLu vmu m jxiqfa xl giaurexnu (rmusu) en dmnza xl jmrazxdeau. Lxd …...

Linux C++ 200行完成线程池类
文章目录1、atomic使用2、volatile关键字3、条件变量4、成员函数指针使用5、线程池6、主线程先退出对子线程影响7、return、exit、pthread_exit区别8、进程和线程的区别1、atomic使用 原子操作,不可分割的操作,要么完整,要么不完整。 #includ…...

C语言指针剖析(初阶) 最详细!
什么是指针?指针和指针类型野指针指针运算指针和数组二级指针指针数组什么是指针?指针是内存中一个最小单元的编号,也就是地址。1.把内存划分为一个个的内存单元,一个内存单元的大小是一个字节。2.每个字节都给定唯一的编号&#…...

AcWing语法基础课笔记 第三章 C++中的循环结构
第三章 C中的循环结构 学习编程语言语法是次要的,思维是主要的。如何把头脑中的想法变成简洁的代码,至关重要。 ——闫学灿 学习循环语句只需要抓住一点——代码执行顺序! while循环 可以简单理解为循环版的if语句。If语句是判断一次…...
A simple freeD tracking protocol implementation written in golang
可以使用的go版本freed调试代码 可以通过udp发送和接收数据 What is freeD? freeD is a very simple protocol used to exchange camera tracking data. It was originally developed by Vinten and is now supported by a wide range of hard- and software including Unreal…...
简约精美电商小程序【源码好优多】
简介 一款开源的电商系统,包含微信小程序和H5端,为大中小企业提供移动电子商务优秀的解决方案。 后台采用Thinkphp5.1框架开发,执行效率、扩展性、稳定性值得信赖。并且Jshop小程序商城上手难度低,可大量节省定制化开发周期。 功…...

全网详解 .npmrc 配置文件:比如.npmrc的优先级、命令行,如何配置.npmrc以及npm常用命令等
文章目录1. 文章引言2. 简述.npmrc3. 配置.npmrc3.1 .npmrc配置文件的优先级3.2 .npmrc设置的命令行3.3 如何设置.npmrc4. 配置发布组件5. npm常用命令6. 重要备注6.1 yarn6.2 scope命名空间6.3 镜像出错1. 文章引言 今天在某低代码平台开发项目时,看到如下编译配置…...
从0开始学python -31
Python3 模块-1 在前面的几个章节中我们基本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。 为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互…...

Jenkins的使用教程
介绍: Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 目的: 最重要目的就是把原来分散在各个机器上繁杂的工作全部…...
1.Maven的坐标和依赖
【maven坐标】1.groupId: 通常与域名反向一一对应2.artifactId: 通常使用实际项目名称3.version: 项目当前版本号4.packaging:maven项目的打包方式,默认是jar5.classifier: 定义构建输出的一些附属构件,例如:nexus-indexer-2.0.0.…...

Jenkins 笔记
Jenkins brew install jenkins-lts brew services restart jenkins-lts brew services stop jenkins-lts b999ff5683464346b6d083f894968121 l 软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,…...

Python和Java语言,哪个更适合做自动化测试?
经常有测试新手问我:Python和Java语言,哪个更适合做自动化测试?本来想简单的回答一下的,但又觉得对不起大家对小编的信任。因此,小编今天专门写了一篇文章来回答这个问题。欢迎各位大佬补充~1、什么是自动化测试&#…...

互联网的路由选择协议
互联网的路由选择协议 文章目录互联网的路由选择协议路由选择协议的几个概念分层次路由选择协议内部网关协议RIP协议距离向量算法RIP协议的报文格式内部网关协议OSPFOSPF的报文格式✨OSPF的特点外部网关协议BGPBGP的报文格式参考本篇主要讨论的是路由表中的路由是如何得出来的。…...
接口幂等性处理
1.Token 机制: a首先客户端请求服务端,获取一个 token,每一次请求都获取到一个全新的 token(当然这个 token 会有一个超时时间),将 token 存入 redis 中,然后将 token 返回给客户端。 b客户端…...

数字孪生智慧机场:透视数字化时代下的航空运营
在《智慧民航建设路线图》文件中,民航局明确指出,智慧机场是实现智慧民航的四个核心抓手之一。这一战略性举措旨在推进数字化技术与航空产业的深度融合,为旅客提供更加智能化、便捷化、安全化的出行服务,进一步提升我国民航发展的…...

SpringBoot 文件上传后查看404的问题和解决404后需要访问两次才能查看的问题
文件上传、图片上传的实现见这个: SpringBootVue 实现头像上传功能_Teln_小凯的博客-CSDN博客 在实现上面的功能后,发现查看图片的时候提示404,解决这个方法如下: 1、配置资源静态文件映射 第一个参数是页面请求的地址&#x…...

定时任务使用总结
定时任务表达式生成工具网站:https://cron.qqe2.com/定时任务选型:xxl-job 官方文档:https://www.xuxueli.com/xxl-job/安装定时任务调度中心 xxl-job-admin第一步、先导入xxl-job的数据库:地址:https://gitee.com/xux…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...