当前位置: 首页 > article >正文

Git-学习笔记(粗略版)

前言

        很多人都听过git,github这些名词,但是它们是什么,怎么使用?git和github是一个东西吗?本文将详细解答这些问题,彻底弄懂git。

1.Git是啥❓

有一天,我们的插画师小王接到一个绘画订单,但奈何能力有限,一天之内他不可能全部完成。但是他发现了一个神奇的画板的 Git ,他发现在Git画板上绘画,不会掉色,而且能够很好地保存起来自己每天的绘画进度,之后的每一天都可以在前一天的基础上进行创作,不用再重头开始~

 经过三天的辛苦创作,小王在第四天将画稿交给金主爸爸,结果...

要是一般的画家,估计心态直接崩了(你不早说!) ,但是我们小王可是使用 Git 的画家,只见他反手掏出 Git,直接取出第一版画稿,交付给了老板。

这就是Git,它最早是由开源软件的开发者林纳斯・托瓦兹(Linux 之父)在 2005 年开发的,用于帮助管理 Linux 内核的开发工作。现如今是一个免费的、开源的分布式版本控制系统,可以高速处理从小型到大型的各种项目。

对于我们写程序的人来说,上面画家画的画,就好比我们写出来的一个个功能代码,使用Git可以很好的保存这些代码文件,当你对代码进行修改、添加或者删除操作后,Git 也能够记录这些变化 ( •̀ ω •́ )y ,并且就算后续出现了什么代码差错,我们也可以回退到正常的代码版本,继续开发。从而实现对于软件的版本控制

2.git的安装

首先我们得先在Windows系统上进行安装,先进入官网:Git-分布式版本控制工具

点击页面右下角的download 

依据自身电脑的架构,选择安装,比如我是x64架构的电脑,就选择第一个版本下载。

如果不清楚自己的电脑架构,可以使用 win+r 打开终端,输入以下命令:

msinfo32

就可以在跳出来的页面中,查看自己的电脑类型了。

 接下来,一直安装即可,稍微注意以下几个选项

如果你想在其它系统(如苹果的Mac系统)上安装git,可以在官网的左下角选项中,选择你对应的系统版本进行安装

 对于没有图形界面的Linux系统,你可以使用下面的命令进行安装:

// Ubuntu系统
sudo apt install git
// CentOS系统
sudo yum install git

3.git基本命令使用 

3.1 初始化仓库和注册 

正如第一章所述,git好比一个可以记录历史记录的神奇画板,那我们总得找个地方(仓库),来放这个画板吧。我们可以新建一个文件夹用来存放它,鼠标右键,选择 open git bash here 开启我们的Git终端(终端中可执行的命令与Linux基本一致)。接着输入 git init 命令初始化git仓库。

输入完之后,你会发现我们的文件夹中新增了一个.git文件,表示我们初始化成功了,这个文件夹现在就是我们的git仓库。

PS.如果你没发现, 那可能是因为.git文件本身是一个隐藏文件,正常情况下就是不可见的,你需要点击 "查看" 按钮,选择显示隐藏文件,就可以了。

当然如果你是第一次使用,还得配置一下你的用户名邮箱 ,就好比现如今你使用任何网站,基本都需要你进行注册的操作。而在团队合作的项目中,我们每个人在提交自己的代码文件的时候,git都会清楚地记录下来是谁提交了哪些代码文件,做了哪些修改,记录的就是用户名和邮箱!

使用以下命名设置我们的git用户名和邮箱,当然之后如果你想修改,也是使用这两命令:

git config --global user.name 用户名
git config --global user.email 邮箱

使用 git config --list --global 可以清楚地查看我们git当中全局变量的设置,前两行就是我的用户名和邮箱。(git config --list 可以查看所有的git配置情况) 

而第四行的 core.autocrlf=true 这个配置项用于处理不同操作系统下的换行符差异
在 Windows 系统中,换行符通常是 CRLF(即回车加换行),而在 Linux 和 Mac 系统中换行符是 LF(换行)。设置 core.autocrlf=true 后,Git 会在从仓库检出文件时将换行符转换为 CRLF 格式,在提交文件时会将换行符转换为 LF 格式。这样可以避免因为换行符不同而导致的文件差异问题,方便在不同操作系统之间进行代码协作。我们可以用以下命令设置该选项的开关。

git config --global core.autocrlf false  // 关闭
git config --global core.autocrlf true   // 开启

 而当你完成了上述初始化注册之后,下面就可以正式开始我们的 git 使用了。

3.2 文件的提交保存 

整个 git 仓库,可以被划分为三个区域:工作区,暂存区(索引区),版本区(仓库区)

  • 工作区:就是我们平常写各种文件的地方,与 .git 文件在同一级目录中,我们可以将我们写好的各种文件,放在这个地方。里面的文件和文件夹都是可以直接编辑、删除、创建等操作的,它们存储在本地文件系统(如 Windows 的 NTFS 文件系统、macOS 的 APFS 文件系统等)中。
  • 暂存区:相当于一个中转站,实际上就是是 .git 文件夹中的 index 文件。当你在工作区对文件进行了修改,并且你觉得这些修改是值得保存的,就可以把它们放到暂存区。这样做的好处是,你可以选择先把一组相关的修改放到暂存区,等到你觉得这些修改已经足够完整,再一起提交到版本区。它就像一个缓冲区,让你可以对要提交的内容进行整理和筛选。
  • 版本区:也就是我们的git仓库了,它会永久记录你的每一次暂存区中提交的版本。

举个例子👇 

1.在 工作区 中,新增了一个 a.txt 文件。 

2. 使用 git status 命令,查看当前git中的文件状态,显示a.txt文件状态为未追踪(Untracked),这个状态说明文件a.txt是新建的,还未被git管理。

3.使用 git add 命令,将a.txt文件提交到 暂存区 (如果想一次提交全部工作区中的所用文件,可以使用 git add . 命令)

4. 这个时候,再次查看 a.txt 文件状态,显示为已暂存 (staged),表明我们的文件已经被加入到暂存区中了

5.使用 git commit -m '提交的消息' 将暂存区中的所有文件提交到版本区中。并附带提交的消息,共同记录。(这里参数-m之后所填写的内容,一般可以简短介绍,本次提交,你做了哪些内容修改)

6.使用 git log 命令查看我们的版本提交记录,可以清楚地看到是谁(Author)在什么时间(Date)做了什么修改(就是最后一行,显示的内容就是git commit的附加信息),并且每条记录都有唯一的哈希值(第一行的字符串)与之配对,这个哈希值实际上是根据我们提交的内容使用SHA1算法计算得到的。

 实际上,在git当中文件一共有以下四种状态: 

3.3 版本回退 

让我们再次提交一个版本,这次新增了一个b.txt文件,使用git log可以查看到我们的两次版本提交

 如果这个时候,我们想要进行版本回退,该怎么办?我们可以是 git reset 命令,格式如下:

git reset head~  // ~表示回退一个版本
git reset head~~ // 表示回退2个版本
git reset head~10  // 表示回退10个版本
// 也可以使用log中记录的版本哈希值进行回退
git reset 某个版本的哈希值

这里有几个 ~ 就表示回退几个版本 ,那head是什么?实际上,head是一个指向当前我们所处版本的指针,我们在终端的 git log 命令可以看到head,head~就表示我们当前所处版本的前一个版本。

使用reset命令后,你会发现,我们仿佛穿越时光,来到了过去,新增的b.txt甚至还没被加入到暂存区中。 使用git log,发现我们的第二次版本也消失了,真的回到了最初的节点!

而当我们使用 --soft 参数的时候,会发现版本也回退了,但此时,b.txt文件是在暂存区中的!这就是软回退

而当我们使用 --hard 参数的时候,会发现工作区的b.txt文件都消失了,一点记录都不剩!这就是硬回退(慎用)

那如果一不小心,回退错了,怎么办啊!

实际上 git reset 命令,不仅可以往回滚,还可以往前滚!

 我们可以使用下面的命令,获取全部的历史提交记录:

git reflog

接着使用 reset 哈希值 的方式,将版本往前滚。 

3.4 忽略文件

如果工作区中,有些文件我们不想被git管理该怎么办?比如我的项目的配置文件不想被git管理,那我们可以创建.gitignore文件,比如说,我想工作区中的所有.xml文件以及.gitignore文件本身,都不被git管理,那么我只要在.gitignore文件中写入对于的文件表达式就可以,如下:

echo *.xml >> .gitignore
echo .gitignore >> .gitignore 

3.5 分支 

现在有一个团队项目,我们把功能拆解,让小王负责写登录的代码,小李负责写注册的代码,小张则负责管理全部的代码。那这个时候,我们就可以使用git的分支功能,每个人都把自己的代码放在自己对应的分支上,最后写完之后,在把各个分支的代码合并在一起就可以了。

$ git branch login  // 创建一个login分支$ git checkout -b register  // 创建并切换到register分支

说干就干,我们使用 git branch 分支名 命令创建新的分支,使用 git checkout -b 分支名 命令创建注册分支,并切换到该分支上。此时新产生的分支当中的文件内容和原先当前位置节点的内容是完全一样的。当前我们处在register分支上,也就是在小李的分支上。如果想要查看当前所有的分支,可以使用 git branch -v 命令

而这个时候,当小李使用git commit提交它的注册功能代码,我们的仓库发生了变化,可以看到新产生的c2节点是只属于regiter分支上了,其它两个分支并不能访问c2的内容。

使用以下命令切换到登录分支上,并提交两次文件,可以发现,提交的c3和c4两个版本的代码,只属于login这条分支上,其它的分支无法查看到。

git checkout login // 切换到login分支上
git commit   // 提交c3版本的登录代码
git commit   // 提交c4版本的登陆代码

而当注册和登录功能代码都完成后,我们就可以把这两部分代码合并到一起了,

使用 git merge 分支名 命令,将分支合并(左图)

对于没用的分支,我们可以使用git branch -d 分支名 进行删除(右图)。

最后我只需要将整合之后的代码,放到我们的main主分支上就可以了。 

但有时,会出现下面的情况,两个都是修改了同一个文件,那么合并之后,这个文件的内容会是什么?实际上,这就是发生了冲突,由晚提交的人,手动修改,决定文件中的内容该如何保存。

 4.码云

Git 是一个分布式版本控制系统,用于代码版本管理;GitHub、Gitee(码云)和 GitLab 是基于 Git 的代码托管平台,提供代码协作等功能。

  • Git:本地代码版本管理工具,支持离线操作,用于记录代码修改历史和分支管理等。

  • GitHub:国际化的代码托管平台,提供代码协作和审查功能,拥有庞大的开源社区。

  • Gitee:国内代码托管平台,网络访问速度快,适合中国开发者,支持中文界面。

  • GitLab:提供完整的 DevOps 功能,支持持续集成和持续交付,可自托管部署。

这里以码云(Gitee)为例,首先注册好账号后登录,创建仓库:

接着使用ssh的方式与我们的仓库进行连接,现在本地生成密钥对

ssh-keygen -t rsa -C "你的邮箱" // 使用rsa算法生成密钥对
cat ~/.ssh/id_rsa.pub   // 查看公钥

 将公钥复制,在头像点击"设置",在安全设置中,找到ssh公钥,将我们的公钥复制粘贴进去,这样我们以后与仓库连接进行操作,就不用反复输入账号密码了。

接着来到仓库,按照下面的命令初始化即可。

 一些常用的命令:

命令描述
git remote -v查看远程仓库信息
git remote add <远程仓库名> <URL>添加远程仓库
git remote < rename原名> <新名>重命名远程仓库
git remote rm <远程仓库名>删除远程仓库
git remote set-url <远程仓库名> <新 URL>更新远程仓库 URL
git fetch <远程仓库名>从远程仓库获取代码
git pull <远程仓库名> <分支名>从远程仓库获取代码并合并
git push <远程仓库名> <分支名>将本地代码推送到远程仓库
git push <远程仓库名> --delete <分支名>删除远程分支
git remote prune <远程仓库名>清理本地已不存在于远程的分支记录

相关文章:

Git-学习笔记(粗略版)

前言 很多人都听过git&#xff0c;github这些名词,但是它们是什么&#xff0c;怎么使用&#xff1f;git和github是一个东西吗&#xff1f;本文将详细解答这些问题&#xff0c;彻底弄懂git。 1.Git是啥❓ 有一天&#xff0c;我们的插画师小王接到一个绘画订单&#xff0c;但奈…...

专项智能练习(定义判断)

1. 单选题 热传导是介质内无宏观运动时的传热现象&#xff0c;其在固体、液体和气体中均可发生。但严格而言&#xff0c;只有在固体中才是纯粹的热传导&#xff0c;在流体&#xff08;泛指液体和气体&#xff09;中又是另外一种情况&#xff0c;流体即使处于静止状态&#xff…...

失控的产品

大部分程序员很难有机会做一个新的产品&#xff0c;绝大多时候去一家新公司也都是在旧产品上修修补补。 笔者还是很幸运得到了开发新品的机会&#xff0c;从2023年开始做&#xff0c;中间经历了许多磕磕碰碰。 有的小伙伴从中离开&#xff0c;偶尔又加入1~2个人&#xff0c;但…...

【iOS安全】Dopamine越狱 iPhone X iOS 16.6 (20G75) | 解决Jailbreak failed with error

Dopamine越狱 iPhone X iOS 16.6 (20G75) Dopamine兼容设备 参考&#xff1a;https://www.bilibili.com/opus/977469285985157129 A9 - A11&#xff08;iPhone6s&#xff0d;X&#xff09;&#xff1a;iOS15.0-16.6.1 A12-A14&#xff08;iPhoneXR&#xff0d;12PM&#xf…...

无线定位之 二 SX1302 网关源码 thread_down 线程详解

前言 笔者计划通过无线定位系列文章、系统的描述 TDOA 无线定位和混合定位相关技术知识点, 并以实践来验证此定位系统精度。 笔者从实践出发、本篇直接走读无线定位系统关键节点、网关 SX1302 源码框架,并在源码走读过程 中、着重分析与无线定位相关的PPS时间的来龙去脉、并在…...

对心理幸福感含义的探索 | 幸福就是一切吗?

注&#xff1a;机翻&#xff0c;未校。 Happiness Is Everything, or Is It? Explorations on the Meaning of Psychological Well-Being 幸福就是一切吗&#xff1f;对心理幸福感含义的探索 Journal of Personality and Social Psychology 1989, Vol. 57, No. 6,1069-1081 …...

多平台图标设计与管理的终极解决方案

IconWorkshop Pro 是一款由Axialis团队开发的专业图标设计与制作软件&#xff0c;专注于为设计师、开发者及企业用户提供高效且灵活的图标创作解决方案。该软件凭借其强大的功能与跨平台适配性&#xff0c;成为Windows、macOS、iOS、Android等多系统图标设计的首选工具之一。 …...

ngx_http_keyval_module动态键值管理

一、模块安装与验证 检查模块是否可用 nginx -V 2>&1 | grep --color -o ngx_http_keyval_module如果看到 ngx_http_keyval_module&#xff0c;说明模块已编译进 NGINX。 若未找到&#xff0c;请联系你的 NGINX 供应商&#xff0c;获取商业版或重新编译并启用该模块&am…...

【高频面试题】LRU缓存

文章目录 1 相关前置知识&#xff08;OS&#xff09;2 面试题 16.25. LRU 缓存2.1 题面2.2 示例2.3 解法1 &#xff08;双端队列哈希表&#xff09;思路 2.4 解法2思路 3 参考 1 相关前置知识&#xff08;OS&#xff09; 为什么需要页面置换算法&#xff1a;当进程运行时&…...

讯联云库项目开发日志(二)AOP参数拦截

目录 利用AOP实现参数拦截: 一、​​HTTP请求进入Controller​&#xff08;发送邮件验证码&#xff09; 二、AOP切面触发 1. 切面拦截&#xff08;GlobalOperactionAspect.class&#xff09; method.getAnnotation()​​ null interceptor 判断​​ 2.参数校验注解 3. 参…...

龙虎榜——20250515

上证指数缩量收阴线&#xff0c;个股跌多涨少&#xff0c;上涨波段4月9日以来已有24个交易日&#xff0c;时间周期上处于上涨末端&#xff0c;注意风险。 深证指数缩量收阴线&#xff0c;日线上涨结束的概率在增大&#xff0c;注意风险。 2025年5月15日龙虎榜行业方向分析 一…...

知识图谱重构电商搜索:下一代AI搜索引擎的底层逻辑

1. 搜索引擎的进化论 从雅虎目录式搜索到Google的PageRank算法&#xff0c;搜索引擎经历了三次技术跃迁。而AI搜索引擎正在掀起第四次革命&#xff1a;在电商场景中&#xff0c;传统的「关键词匹配」已无法满足个性化购物需求&#xff0c;MOE搜索等新一代架构开始融合知识图谱…...

python-修改图片背景色

在Python中&#xff0c;可以使用图像处理库&#xff08;如OpenCV或Pillow&#xff09;来修改图片的背景色。通常&#xff0c;修改背景色的流程包括以下步骤&#xff1a; 1、对图片进行分割&#xff0c;识别前景和背景。 2、对背景区域进行颜色替换。 下面是两种实现方法&#x…...

卡洛诗,将高端西餐的冗余价值转化为普惠体验

西餐市场正经历一场结构性变革&#xff0c;一二线城市的高端西餐陷入内卷&#xff0c;而下沉市场却因品质与价格断层陷入选择困境——消费者既不愿为高价西餐的面子溢价买单&#xff0c;又难以忍受快餐式西餐的粗糙体验。这一矛盾催生了万亿级的市场真空地带&#xff0c;萨莉亚…...

【ROS2】ROS节点启动崩溃:rclcpp::exceptions::RCLInvalidArgument

1、问题描述 启动ROS节点时,直接崩溃,打印信息如下: terminate called after throwing an instance of rclcpp::exceptions::RCLInvalidArgumentwhat(): failed to create guard condition: context argument is null, at ./src/rcl/guard_condition.c:65 [ros2run]: Abo…...

Flutter在键盘的上方加一个完成按钮

有些情况下&#xff0c;输入框在输入键盘弹出后&#xff0c; 需要在键盘的上方显示一个toolbar &#xff0c; 然后 toolbar 上面一个完成按钮&#xff0c;点完成按钮把键盘关闭。 如图&#xff1a; 直接上代码&#xff0c;这样写的好处是&#xff0c;把 TextField 给封装了&…...

SQL注入---05--跨站注入

1 权限说明 select * from mysql.user; 这里的Y表示我前面的命令权限为root&#xff0c;n表示不支持root权限 导致结果&#xff1a; 如果为root的话&#xff0c;我就可操作这些命令并且可以进行跨数据库攻击&#xff0c;但是如果不是高权限root就无法执行这些操作 2 root权限…...

Vue 学习随笔系列二十三 -- el-date-picker 组件

el-date-picker 组件 文章目录 el-date-picker 组件el-date-picker 只有某些日期可选 el-date-picker 只有某些日期可选 <template><div><el-form ref"form" size"mini":model"form" :rules"rules"label-width"8…...

【免费分享】虚拟机VM(适用于 Windows)17.6.3

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://drive.uc.cn/s/7c4da5cd2af64 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOQDkRRKc5OUVTauZezaiDEHA1?pwdpybg# 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…...

Oracle中的select1条、几条、指定范围的语句

在Oracle中&#xff0c;可以使用不同的方法来选择一条记录、多条记录或指定范围内的记录。以下是具体的实现方式&#xff1a; 1. 查询单条记录 使用ROWNUM伪列限制结果为1条&#xff1a; SELECT * FROM your_table WHERE ROWNUM 1;特点&#xff1a;Oracle会在结果集生成时分…...

2025 后端自学UNIAPP【项目实战:旅游项目】5、个人中心页面:微信登录,同意授权,获取用户信息

一、框架以及准备工作 1、前端项目文件结构展示 2、后端项目文件结构展示 3、登录微信公众平台&#xff0c;注册一个个人的程序&#xff0c;获取大appid&#xff08;前端后端都需要&#xff09;和密钥&#xff08;后端需要&#xff09; 微信公众平台微信公众平台&…...

校园网规划与设计方案

一、项目概述 校园网是学校实现信息化教学、科研与管理的重要基础设施,其性能与稳定性直接影响学校的整体发展。随着学校规模不断扩大、教学科研活动日益丰富,对校园网的带宽、可靠性、安全性以及智能化管理等方面提出了更高要求。本规划与设计方案旨在构建一个高速、稳定、…...

蓝桥杯算法题 -蛇形矩阵(方向向量)

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 P…...

配置VScodePython环境Python was not found;

Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Manage App Execution Aliases. 候试试重启电脑。 在卸载重装python后会出现难以解决的局面&#xff0c;系统变量&#xff0c;命令行&#…...

ollama 重命名模型

ollama 重命名模型 ollama list# 查看列表 ollama list # 生成原模型的Modelfile文件 ollama show --modelfile qwen3:32b > Modelfile # 从Modelfile文件创建新的模型 ollama create qwen3 -f Modelfile # 删除原模型 ollama rm qwen3:32b...

Qt信号槽机制与UI设计完全指南:从基础原理到实战应用

目录 前言一、信号槽1.1 传参1.2 Qt信号与槽的对应关系1.2.1一对多关系1.2.2 多对一关系 二、Designer三、Layout 布局3.1 基础用法3.2 打破布局3.3 贴合窗口3.4 伸展器&#xff08;Spacer&#xff09;3.5 嵌套布局 四、ui指针五、QWidget六、QLabel 标签使用指南总结 前言 本…...

Anaconda环境中conda与pip命令的区别

文章目录 conda与pip的基本区别在Anaconda环境中的实际差异安装包环境管理依赖解决示例最佳实践建议 常见问题解答 conda与pip的基本区别 包来源与生态系统 conda&#xff1a;从Anaconda默认仓库或conda-forge等渠道获取包 不仅管理Python包&#xff0c;还能管理非Python依赖&…...

XBL6501/02/03在POE设备上的应用方案

前言&#xff1a; 在当今数字化时代&#xff0c;POE&#xff08;Power over Ethernet&#xff09;设备因其能够通过以太网线同时传输数据和电力而被广泛应用。为了满足这些设备日益增长的电源需求&#xff0c;芯伯乐推出了XBL6501/02/03系列DC-DC电源芯片&#xff0c;为POE设备…...

编程题 03-树2 List Leaves【PAT】

文章目录 题目输入格式输出格式输入样例输出样例 题解解题思路完整代码 编程练习题目集目录 题目 Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. 输入格式 Each input file contains one test case. For each case, …...

生信小白学Rust-03

语句和表达式 举个栗子&#x1f330; fn add_with_extra(x: i32, y: i32) -> i32 {let x x 1; // 语句let y y 5; // 语句x y // 表达式 } // 语句执行操作 // 表达式会返回一个值 怎么区分呢&#xff0c;目前我的理解是只要返回了值&#xff0c;那它就是表达式 fn…...