有关Git(小白一看就懂)入门版

news2025/7/9 7:19:44

git的使用是在工作中必备的技能,本系列重写自己曾经学习git的过程,按照从创建git仓库开始操作,赋每一步的演示图,让小白跟着文章操作,一步一步入门

目录

git基本概念

git使用基本流程

文件的四种状态

git的使用和基本命令:

分支操作

链接远程仓库


git基本概念

四个工作区:

git本地有三个工作域:工作区(working directory), 暂存区(stage/index), 资源库(repository)。如 果再算上远程服务器上的git仓库(remote directory)就可以分为四个工作域。其关系如下:

  1. Workspace: 工作区,就是你平时存放项目代码的地方
  2. Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件 列表信息
  3. Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数 据。其中HEAD指向最新放入仓库的版本
  4. Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据 交换 

git使用基本流程

1. 在工作目录中添加,修改文件

2. 将需要进行版本管理的文件放入暂存区

3. 将暂存区的文件提交到git仓库

文件的四种状态

Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态 变为Staged.

Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文 件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可 进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即 从库中取出文件, 覆盖当前修改

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified

git的使用和基本命令:

首先确保自己安装了git工具

linux下使用:

sudo apt install git 管理员状态

创建本地仓库

首先创建一个新目录,使用git init将当前目录变为一个可以通过git管理的仓库

git init

初始化后会生成git的配置文件目录,普通的"ls"命令是看不到的,我们需要使用ls -a查看隐藏目录

演示如图:

 注意事项: 第一次使用git命令提交代码之前,需要先设置用户名及邮箱,之后就不需要了:

git config --global user.name "你的用户名"

git config --global user.email "你的邮箱"

这里我配置过了,这里就不演示了


下来将新创建的文件,代码什么的添加到暂存区

使用git add filename 添加文件到暂存区

filename就是你要添加的文件名

首先我在这里写一段代码,仅仅只是写了个主函数,后面我会不断完善这个文件,上传各个版本。此时main.c提交到暂存区中


此时我们查看一下仓库的状态

使用git status 查看仓库状态

 显示我们暂未提交到本地仓库,位于分支master上(master是主分支),分支后面会讲


接下来我们正式将刚刚的main.c提交到本地仓库中

使用 git commit -m "版本描述信息" 提交版本到仓库

此时我们才是真正提交成功了。


我们使用命令去查看一下刚刚的提交信息

使用git log查看提交的历史记录

head是指向的意思,表示这次提交到哪儿,head->master代表这次提交到master主仓库,如果是head->分支仓库则代表提交到分支仓库


我们可以使用命令去重写上一次提交的注释

git commit --amend

上一次的注释中我们写的是“创建主函数”,我想修改为“创建main.c函数”,终端执行上述语句就会进入此页面 

进入编辑页面修改注释,修改完成之后根据下面的提示,我们选择ctrl o写入,就会得到下面界面

 再按下回车,我们就写入成功了,回退到起始界面

此时我们ctrl x离开退出,git log查看日志,但其实你一退出后git commit --amend命令下面就会显示修改之后的注释,此时就成功变成了“创建main.c”

接下来我们在更改一个版本(提交跟上述过程一样)的代码演示下面的命令:

我们此时在文件中添加个一个add求和的函数,查看日志会发现,此时head指向最新一个版本


下来使用命令查看仓库所有已提交的操作日志

git reflog 查看对仓库的操作日志

head前面的序号就是log查看里那一串长序号的前面几位(这几位就已经够区分不同版本了),我们后面也可以根据这短短的序号去查看所需版本的文件


如果我们想查看以前版本的文件怎么办呢?此时我们的文件是处在添加了add函数的时候,如果我们想回到最初创建main函数的时候,就需要使用回退版本的命令了,下面进行演示:

此时我们的代码长这样:

使用git reset --hard HEAD^ 回退版本

^代表上一个版本的意思,HEAD代表当前仓库的指向,当前HEAD指向master,就代表回滚到master上一次提交的版本

那么git reset --hard HEAD^^就是回退两个版本^^^就是三个版本,一次类推

那么还有一种简便方法
git reset --hard HEAD~3

后面的~3,代表以当前版本为基数,回滚多少次。HEAD~3代表回滚master前三个版本


还有一种方式,我们用版本号去回退,前面讲git log或者git reflog的时候都能看到
版本他独有的版本号,也讲了可以用他去回退版本
git reset --hard 版本号

有三种模式

--soft 、--mixed以及--hard是三个恢复等级。

  • 使用--soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。
  • 如果使用--mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。
  • 如果使用--hard,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。
     

 此时我们会发现代码回归到上个版本的样子了

 此时你git log会发现head就跑到这个版本了

如果我们想再回到之前那个add的最新版本怎么办?我们会发现git log已经查看不到add版本了。

上面我们讲了git reflog这个是查看对版本仓库的操作,我们提交版本,回退等等操作都属于对仓库的操作。我们使用git reflog查看一下历史操作

会发现里面有我们所有的操作历史,同样有所对应的版本号,我们就可以用版本号去回退到我们想要的版本了,add的版本号为773e37a,(之前git log的时候会发现是很长一串773e37a...),不过这里前几位就可以唯一标识了,我们就可以用他去回退版本

示例操作如下:

查看文件,成功回到add时期版本

当然我们回退上一步,回退任何版本都可以用版本号来操作


那么如果我们不小心将工作区的文件删除了怎么办呢?或者说在这一版上写了一部分代码,但是突然不想要了,觉得删代码麻烦

那么可以我们从版本库中把此时最新的一版拿出来(我们删之前或者修改之前的),或者说是放弃此时对于工作区的修改的操作

git checkout filename 放弃对工作区代码的修改
filename就是修改或者删的那个文件

我们会发现文件又回来了~


接下来比如我们修改了一部分代码,但是还未add,我们想知道修改了哪一部分怎么办?(代码量很多,自己忘记了)

如上,我们新增了一句 int a=10;

使用git diff HEAD 比较当前内容与最后一次提交的版本的差异,如下在main.c中添加了一行内容,显示 添加的一行前面有‘+’号标识。如果内容相同则该命令不显示输出结果。HEAD也可以省略默认就是与最近一次比较。如果是和上上个版本比较那就是HEAD ^,依次同理HEAD就是当前版本要清楚

一般都是把现在写的代码和当前版本去比较

 


那么此时如果 我将上面这一次的改动提交到了暂存区,但是我后面发现我没有写完或者不想要了,想撤销怎么办呢?

我先提交了,查看一下状态显示我是暂时放进了暂存区 

那么撤销工作的命令就是:

使用git reset HEAD filename 从暂存区撤销

此时我们刚刚提交到暂存区的操作就被撤销了


有时候我们可能会删除一个文件,就是原来版本中有这个文件使我们需要的,不过后面我们写了更好的一版,这个文件不需要了(从版本仓库中删去),我们就要删除他。

下面我进行操作演示:

需要用到

用git rm filename 删除一个文件

 新增添一文件max.c进入,提交之后,此时之后我们现在就会有两个文件了

如果我们用普通的rm 文件去删除(只是本地工作区删掉了),后续用git checkout max.c又可以恢复max.c文件

如果直接rm删除文件,只是删除工作区的文件,只是与版本库不一样了,git status 会提示你。

恢复工作区文件:git checkout  -- 文件名

那么我们如果想以后都不用了,就是从版本仓库中把他删去,用下面命令

使用git rm filename 删除一个文件, 此时提交到暂存区,需要commit后才在版本库中删除

 此时max.c文件在版本库中被删掉


下面来聊聊分支相关的操作,就像上面的master一样 ,看图说话

那么有一个切换分支的东西,就是比如上图,我们创建了新分支dev,想要在上面实现一些代码。那么就需要把head指针去指向新分支(head是指向的意思,表示这次提交到哪儿),那么之后写的代码都是在这个新分支上面。

 

切换分支是非常常用的! 

分支操作

查看当前都有哪些分支

查看分支: git branch

此时我们只有master这一个分支


创建一个新分支

创建分支: git branch 分支名

此时head还是指向master的


切换分支

切换分支: git checkout 分支名

 此时发现head指向了dev分支,我们下面如果写代码提交,那么都会弄到这个分支上面


此时我们提交代码,编写一个fun函数,就会出现在dev分支上


此时我们切换到master分支,就会发现fun函数不在

 如果我们现在再在master分支上面对这个main函数进行修改,新添一个max函数


还有一个快捷的方式去创建新的分支并切换

创建并切换到该分支: git checkout -b 分支名

假如现在我们想把dev分支上的代码和master上的合并,该怎么办呢?

git merge 分支名

合并某个分支到当前分支: git merge 分支名 ,合并时可能产生冲突,需要解决冲突。
有时需要禁止快速合并,可执行:git merge --no-ff -m '描述' 分支名 

此时在主分支master上,合并发现有冲突,为啥嘞?

 我们打开代码看看

 假如我们两个都想要,那么手动修改一下,提交此版本。这就是我们的最终版


如果我们现在想删除一个分支怎么办呢?

首先我们先新建一个新分支gk,切换到别的分支,然后去删除这个gk分支

删除分支,不能删除当前所处分支,切换到其它分支再删除: git branch -d 分支名


好用的常用操作:

历史记录一行显示 

git log --pretty=oneline

 

 


以图表形式显示分支:

git log --graph


有时候我们在工作的时候比如修改了一部分代码,但是还未完成,因此没有提交,这时候需要我们转到另一个分支上去做一些操作,如果我们不保存这些未完成的代码,如果切换分支过后,原分支这些修改未提交的代码就会不见了。因此我们需要保存此时工作区的状态

保护现场 git stash,当前工作区有代码修改了,是不能切换到其他分支,可以先保存现场,再切换 

git stash

我们先不保存修改代码看看是什么样的。我们现在处在master分支,对于main.c做一些修改,未提交,然后切换到dev分支

 

 他会提示我们要么提交代码要么去保存

我们去保存一下现在的工作现场,去查看保存之后的代码会发现,代码显示的是你未修改之前的状态,你修改的那部分,他给你保存在了别的地方(就是我刚刚修改的调用add函数的代码)

此时就保存了现场,成功切换分支   


那么当我们在dev分支上一顿操作结束之后,我们需要回到master去处理刚刚没弄完的代码怎么整呢? 

首先我们先切回master,你查看你的代码文件发现并没有刚刚修改的那部分,那是因为,保存现场之后git把那部分代码存到别的地方去了,此时我们需要先看看我们都保存了哪些现场,再根据需要去恢复那部分保存的现场代码

列出所有保存的现场信息

 git stash list

             我们看到现在就保存了一个现场,现在就需要取出现场,去恢复代码了


取出某次的现场信息,继续工作 :

git stash pop默认是最近一次

git stash pop "stash@{1}" 加上编号,取不同的现场信息

如果有多个现场,也可以加上编号"stash@{1}"指定获取某一个。不同分支的现场,应该回到对应分支再获取,否则会自动合并现场到当前分支的工作区。                                                                    此时回到最初调用了add函数的状态

                   

这样的话git基础的本地操作流程就说完了              

链接远程仓库

可以用github和gitee去尝试链接一下

这一部分一定是工作之后最经常用的,具体操作演示这里就不多说了,网上有太多的教程了

这里把每天都要用的命令列在这里

. 克隆项目:git clone 项目地址
. 提交分支到远程仓库:git push origin 分支名 
. 提交分支到远程仓库,并跟踪分支 :git push -u origin 分支名
. 拉取远程服务器上的分支更新到本地 :git pull origin 分支名

到此这一版本的git学习就到这里了,我都是按照当初我学习的步骤演示了一遍,小白看完文章跟着操作,一定会对git有一定的了解的

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

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

相关文章

Vue3 - this 概念及使用方法(详细教程)

前言 对比 Vue2 ,引出并展开 Vue3 。 本文讲述了 this 概念及应用场景,以及使用方法和代码示例详细讲解。 回忆 Vue2 我们在 Vue2 项目中,可能写得最多的单词就是 this 了,咱们无论是拿数据还是调方法,一律 this。 先…

前端学习路线(一)

很多人问我前端学习的路线是怎么样的,css要学多久,js高级要不要学,先学node.js还是先学vue,所以想通过一篇博文来讲一下这个事情 要不要学前端三剑客 这个问题是很多想快速上手前端的同学问的最多的一个问题,因为有很…

同样做软件测试,为什么有人月入3k-5k,有人能拿到17-20k?

同样做软件测试,为什么有人月入3k-5k,有人能拿到17-20k? 虽然各大培训机构一直鼓吹软件测试行业薪资高,但是依旧有一些拿着3-5k薪资,甚至找不到软件测试工作的人。 先来看一些例子: 1、小A在一家培训机构…

微信小程序开发教程一--注册小程序、下载开发工具及新建工程

从本章开始,我们将讲解微信小程序的简单开发流程,我将尽量使用简洁的语言,逐个步骤详细讲解,让大家都能跟得上,也希望和大家交流学习。 注册 首先,开发小程序需要先在微信注册。 打开网页:https://mp.weixin.qq.com/ 在下面找到小程序: 将鼠标移上去之后,就能看到“…

mysql的监控大屏

前言: 一款方便的mysql的监控大屏,使用开源项目实现MySQL的监控,对于想要进行mysql的时候情况监控来说比较重要,并且这款工具是不需要与代码进行结合的,直接运行打开就行了。 具体方式如下: 第一款&…

MySQL数据库期末考试试题及参考答案(03)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、填空题 插入数据时,如果不指定____,必须为每个字段添加数据。MySQL中使用____语句来更新表中的记录。MySQL提供____语句用于删除表中的数据。在…

Redis数据结构之——sds

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 Redis数据结构 Redis是以k-v形式存储的内存数据库,其中key和value都是以对象(object)的形式进行存储。对象分为:string、list、hash、set和zet五种对象,这五种对象…

MySql 执行count(1)、count(*) 与 count(列名) 区别

MySql 执行count(1)、count(*) 与 count(列名) 区别 1. 初识 count COUNT(expr) ,返回 SELECT 语句检索的行中 expr 的值不为NULL的数量。结果是一个 BIGINT 值。 如果查询结果没有命中任何记录,则返回 0。 COUNT(*) 的统计结果中,会包含值…

一篇文章,带你了解CodeTour与入门指导

CodeTour(代码之旅)是微软官方开发的 VS Code 扩展,允许记录和回放代码的演练和思路。 简介 CodeTour 是一个 VS Code 插件,允许记录和回放代码库的演练和思路。我们通常都是通过代码注释或者文档来解释某段代码或方法的功能及逻…

【Linux】权限管理-权限的概念,umask,粘滞位

文章目录shell命令以及运行原理Linux权限的概念用户间的权限切换su和su -的区别仅提升当前指令的权限Linux权限管理文件访问者的分类(人)文件类型和访问权限(事物属性)文件权限值的表示方法字符表示方法8进制数值表示方法文件访问权限的相关设置方法改变…

前端项目中资源请求顺序和dom结构顺序不一致,资源启动器有(索引)解析器和脚本

红色框资源是在组件1中 绿色框资源是在组件2中 在页面 DOM 结构中组件顺序是,从上到下:组件1->组件2 但是查看 chrome调试工具的网络请求,发现绿色资源先请求,并且像是请求完才会去请求红色资源,它们启动器那一栏…

C++语法——make_heap、push_heap、pop_heap、sort_heap使用介绍

目录 一.make_heap(...) 二.push_heap(...) 三.pop_heap(...) 四.sort_heap(...) 这三个函数位于<algorithm>头文件中。 可以看这篇文章了解堆排序&#xff1a;手把手教你堆排序 一.make_heap(...) 这是该函数的官方定义&#xff1a; 这个函数用于建立堆。 前两个…

Linux日志管理logrotate日志轮转

文章目录 前言 日志轮转简介 工作原理 配置文件种类 观察主文件和子文件 主配置文件介绍 yum日志轮转示例 配置轮转规则 rotate 3演示 总结 前言 上篇文章学习了系统日志管理&#xff0c;对于日志来讲他是占内存的&#xff0c;当有大量的日志产生的时候&#xff0c;会…

一个简单HTML5期末考核大作业,学生个人html静态网页制作代码

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

m基于PSO粒子群优化的第四方物流的作业整合算法matlab仿真,对比有代理人和无代理人两种模式下最低运输费用、代理人转换费用、运输方式转化费用和时间惩罚费用

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB程序 4.完整MATLAB程序 1.算法概述 粒子群优化 (PSO)算法是通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法。PSO是将群体(swarm)中的个体看作是在D维搜索空间中没有质量和体积的粒子(part…

Paddle入门实战系列(一):基于PaddleOCR的车牌识别

✨写在前面&#xff1a;强烈推荐给大家一个优秀的人工智能学习网站&#xff0c;内容包括人工智能基础、机器学习、深度学习神经网络等&#xff0c;详细介绍各部分概念及实战教程&#xff0c;通俗易懂&#xff0c;非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。…

MySQL十秒插入百万条数据

mysql数据库准备 private String Driver "com.mysql.cj.jdbc.Driver";private String url "jdbc:mysql://localhost:3306/mp?serverTimezoneAsia/Shanghai&rewriteBatchedStatementstrue";private String user "root";private String pa…

Pycharm 翻译插件失效(transaction) 问题解决【包括安装视频教程】

嗨害大家好鸭&#xff01;我是小熊猫❤ 最近有很多朋友反应 翻译插件用不了了(不想看文章的朋友 可以直接点击文章最下方QQ群 领取视频版教程) 那么今天&#xff01;&#xff01;&#xff01; 教大家如何快速解决这个问题 点击文件(file) —> 设置(setting) 点击工具(t…

【附源码】计算机毕业设计JAVA家庭园艺服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

【Node.js】 第四章 模块化

目录 1. 模块化的概念 1.1 模块化的概念 1.2 模块化规范 2. Node.js中的模块化 2.1 模块分类 2.2 模块加载 2.3 模块作用域 2.4 向外共享模块成员 2.5 exports对象 2.6 Node.js中的模块化规范 1. 模块化的概念 1.1 模块化的概念 按照模块指定规则&#xff0c;把一…