Git-学习笔记(粗略版)

news2025/7/14 18:08:24

前言

        很多人都听过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 <远程仓库名>清理本地已不存在于远程的分支记录

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

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

相关文章

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

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

【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…

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

注&#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 …

【高频面试题】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日龙虎榜行业方向分析 一…

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

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

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权限…

【免费分享】虚拟机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/…

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 标签使用指南总结 前言 本…

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…

缺乏需求优先级划分时,如何合理分配资源?

当需求优先级不明确时&#xff0c;合理分配资源的关键在于建立统一评估标准、实施敏捷资源管理、提升团队协作效率、加强跨部门沟通机制。尤其是建立统一评估标准至关重要&#xff0c;它能帮助组织快速判断各项需求的重要性与紧迫性&#xff0c;从而实现资源的动态匹配与有效利…

操作系统学习笔记第3章 内存管理(灰灰题库)

1. 单选题 某页式存储管理系统中&#xff0c;主存为 128KB&#xff0c;分成 32 块&#xff0c;块号为 0、1、2、3、…、31。某作业有 5 块&#xff0c;其页号为 0、1、2、3、4&#xff0c;被分别装入主存的 3、8、4、6、9 块中。有一逻辑地址为 [3, 70]&#xff08;其中方括号中…