git极快上手指南超级精简版
注:本文参考https://www.liaoxuefeng.com/wiki/896043488029600
原文非常值得一读,作者学识渊博,补充了很多有意思的知识。我仅仅是拾人牙慧。

git是最先进的分布式版本控制系统。
版本控制系统——自动记录系统中文件的改动情况,还可以多人协同编辑。

一、git诞生历史及背景
git是Linux创始人Linus用C语言编写的,起初用于管理Linux社区提交的代码,后来GitHub网站上线后,为开源软件提供Git存储。
1.1 分布式vs集中式
版本控制器有分布式和集中式,集中式是使用一台中央服务器为其他用户进行版本控制,需要联网所以上传速度慢,如果服务器挂了,所有人都没法工作了。分布式是每个用户都有一个完整的版本库,无需联网,多人协同时仅需共享各自修改的部分。但分布式通常也有一台充当中央服务器的电脑。
二、git安装教程
参考文章:https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496
2.1 git配置
(base) yfy@yfydeMacBook-Pro ~ % git config --global user.name "yfy"
(base) yfy@yfydeMacBook-Pro ~ % git config --global user.email "yyanfeiyu@163.com"
2.2 创建版本库
版本库也叫仓库,git会跟踪仓库里的所有文件的修改情况,以便追踪历史或还原。
(base) yfy@yfydeMacBook-Pro CPP % mkdir learngit
(base) yfy@yfydeMacBook-Pro CPP % cd learngit
(base) yfy@yfydeMacBook-Pro learngit % git init
Initialized empty Git repository in /Users/yfy/Desktop/CPP/learngit/.git/
(base) yfy@yfydeMacBook-Pro learngit % ls -ah
. .. .git
其中.git目录就是git用来跟踪管理版本库的。
2.3 将文件添加到版本库以及其它git命令
重要提示:所有的版本控制系统,只能跟踪文本文件的改动,无法跟踪二进制文件如图片和视频(包括word)。
使用Windows系统不能使用自带的记事本编辑任何文本文件,建议使用vscode编辑。
-
编写一个txt文件,一定要放在版本库目录下。
-
第一步,用命令git add 告诉Git,把文件添加到仓库。
-
第二部,用命令git commit告诉Git,把文件提交到仓库。-m后的是本次提交的说明。
(base) yfy@yfydeMacBook-Pro learngit % git add readme.txt
(base) yfy@yfydeMacBook-Pro learngit % git commit -m"wrote a readme file"
[main (root-commit) 9b82f95] wrote a readme file1 file changed, 2 insertions(+)create mode 100644 readme.txt
如果有多个文件需要add:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
笔者个人更偏好使用git add . 进行多个文件的提交
- 如果文件被修改了,可以使用git status查看状态
On branch main
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: readme.txtno changes added to commit (use "git add" and/or "git commit -a")
- 如果想知道哪里被修改了,使用git diff查看
diff --git a/readme.txt b/readme.txt
index d8036c1..15f01b8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@Git is a version control system.
-Git is free software.
\ No newline at end of file
+Git is free software.
+Git is easy.
- 查看历史记录git log
commit 3d3d739bf5478af94698d35533dbb2ef8ba10bce (HEAD -> main)
Author: yfy <yyanfeiyu@163.com>
Date: Wed Feb 1 13:45:52 2023 +0800add distributedcommit 9b82f959387583938afebdbcfb091b463e5e803f
Author: yfy <yyanfeiyu@163.com>
Date: Tue Jan 24 22:01:02 2023 +0800wrote a readme file
commit后的一长串数字是版本号,用于区分多个人在同一个版本库中的提交信息。
-
查看版本号可以使用git reflog
-
回退一个版本git reset --hard HEAD^
其中HEAD表示当前版本,一个代表一个版本,回退两个就需要写2个,回退太多的话,比如回退100个版本,可以是git reset --hard HEAD~100
- 撤销回退git reset --hard 目的版本号
三、工作区和暂存区操作

工作区就是创建的learngit目录,其中有一个隐藏目录.git,是Git的版本库,其中有 被称为stage(或index)的暂存区,还有分支master和指向分支的HEAD。
git add是把文件修改添加到暂存区,git commit是将暂存区的所有内容提交到当前分支。
3.1 撤销修改
如果文件修改后还未git add,则可以使用git checkout – 文件名,丢弃工作区的修改。如果已经git add了,则可使用git reset HEAD 文件名,重新放回工作区。(以上命令可以通过git status获得提示),如果已经提交到分支了,就需要进行版本回退了。
3.2 删除文件
如果将已经提交到版本库中的文件,用rm命令直接删除,是不能完全删除的,需要用到git rm删除,然后使用git commit命令进行提交。
如果文件已经提交到了版本库,就不用担心误删除,都是可以恢复的。
四、远程仓库
我们可以使用git,把代码存储到远程服务器上,例如GitHub网站,这样就不用担心硬盘不足了。但注意git只能管理文本文件。
4.1 如何上传代码到GitHub

- 第0步
注意,如果不愿意花额外的费用进行科学上网,建议使用Gitee进行代码托管。如果不介意,就使用邮箱注册GitHub
- 第1步 创建SSH Key
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
然后一路回车即可。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
- 第2步 在GitHub上绑定公钥
进入GitHub个人页面,在左边栏找到「SSH and GPG keys」,选择「New SSH key」,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
简单讲一下非对称加密算法,你有一个还没上锁的盒子,但锁已经挂在上面了,只需要摁一下就可以上锁,用这个盒子让别人存放东西,他只需要摁一下锁,别人就没法打开,只有盒子所有者有钥匙打开。这个摁一下的动作就相当于公钥,盒子所有者的钥匙相当于私钥。
- 第三步 添加远程库
我们需要在GitHub上也创建一个git仓库,好与本地仓库同步,可作为备份抑或是多人协作。
注意:参考文章在此处已经不具有操作价值,不过还是有阅读价值。由于GitHub已经不让使用账户密码进行推送代码了,需要使用个人访问令牌。参考https://docs.github.com/zh/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
- 第四步 创建个人访问令牌
进入GitHub,点击头像,找到「setting」选项,进入后在左边栏找到「Developer settings」选项,然后是「Personal access tokens」选项栏中的「token(classic)」。在其中找到「Generate new token」,然后填写相关信息,为了方便可以选择永久使用该token,多选项可以全选。最后会出来一串字符,记得保存下来。
然后在命令行中执行
git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git
<your_token>替换为最后出现的字符串,然后后面的部分是仓库的网址。
然后可以执行git remote -v检查一下自己关联的地址是否正确。
笔者在这里被频繁掉线的梯子和奇葩的git命令报错折磨疯了,所以介绍Gitee了。
4.2 如何上传代码至Gitee

我参考的还是廖老师的文章,和GitHub大同小异。配置好公钥后,上传不再需要使用密码了。
因为之前我关联了GitHub上的,所以还需要git remote rm origin删除一下。
然后我在准备提交的出现了一些不同的报错信息,通过bing检索找到了解决方案。
最终提交的手法可以总结为git三板斧:add+commit+push
也就是提交到了版本库后,执行git push就上传到远程仓库了。
顺便记录一下我发现在终端里输入命令code .可以直接让vscode打开当前所在文件夹,非常方便。
4.3 从远程仓库克隆

上面的操作部分是介绍了从本地上传至远端仓库,接下来介绍从远端仓库同步到本地,或者叫克隆远端仓库到本地。
只需要找到远程仓库的SSH链接,然后在本地使用git clone + SSH链接即可。当然,HTTPS链接也可以,但缺点是慢。
这个命令只适合于从头开始拷贝一份完整的项目代码,但是如果是想要本地多设备同步,并仅限于自己的分支,修改后使用git pull同步。
比如我的PC修改提交后,想在Mac上继续工作,就需要在Mac上执行git pull先将PC修改的部分同步到Mac。
五、分支管理
5.1 如何理解分支呢?
假设你需要两周才能完成一个项目,第一周你写了一半的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,你可以创建了一个属于自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上。
git上的分支最大的优点就是快。
我们各个时间的版本库就像一串链表,分支其实就是指向某个节点的指针,分支的合并就是切换指针的指向。

5.2 分支命令
创建并切换到dev分支:
git checkout -b dev或者git switch -c dev
这相当于两条命令:
git branch dev
git checkout dev或者git switch dev
git branch命令可以查看所有的分支,当前所在分支前面会有*
此时在dev分支上,进行修改并提交,再切换到主分支上,是看不到dev分支做的修改,需要将dev分支合并到主分支上,使用git merge dev,合并完成后就可以删除dev分支了,使用git branch -d dev
分支汇总命令:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
相关文章:
git极快上手指南超级精简版
注:本文参考https://www.liaoxuefeng.com/wiki/896043488029600 原文非常值得一读,作者学识渊博,补充了很多有意思的知识。我仅仅是拾人牙慧。 git是最先进的分布式版本控制系统。 版本控制系统——自动记录系统中文件的改动情况࿰…...
蓝桥杯-最长公共子序列(线性dp)
没有白走的路,每一步都算数🎈🎈🎈 题目描述: 已知有两个数组a,b。已知每个数组的长度。要求求出两个数组的最长公共子序列 序列 1 2 3 4 5 序列 2 3 2 1 4 5 子序列:从其中抽掉某个或多个元素而产生的新…...
GO的并发模式Context
GO的并发模式Context 文章目录GO的并发模式Context一、介绍二、Context三、context的衍生四、示例:Google Web Search4.1 server程序4.2 userip 包4.3 google 包五、使用context包中程序实体实现sync.WaitGroup同样的功能(1)使用sync.WaitGro…...
《Redis实战篇》六、秒杀优化
6、秒杀优化 6.0 压力测试 目的:测试1000个用户抢购优惠券时秒杀功能的并发性能~ ①数据库中创建1000用户 这里推荐使用开源工具:https://www.sqlfather.com/ ,导入以下配置即可一键生成模拟数据 {"dbName":"hmdp",…...
《C++ Primer Plus》第16章:string类和标准模板库(11)
其他库 C 还提供了其他一些类库,它们比本章讨论前面的例子更为专用。例如,头文件 complex 为复数提供了类模板 complex,包含用于 float、long 和 long double 的具体化。这个类提供了标准的复数运算及能够处理复数的标准函数。C11 新增的头文…...
声明和定义
前言 很多编程语言的语法中都有关于声明和定义的概念,这种概念一般会应用于函数或变量的创建和使用中,但是为什么要这么做? 以C语言为例,一些书籍或教程会要求读者在程序文件开头写上函数和变量的声明,然后再在后面对…...
Python获取最小路径,查找元素在list中的坐标
# codingutf-8__author__ Jeff.xiedef t(li):pass获取最小路径def minPathSum(grid):if not grid:return 0m len(grid) #m列n len(grid[0]) #n行print(grid[0])print("m: ",m)print("n: ",n)#创建一个二维数组dp [[0]*n for _ in range(m)]print(dp) #这…...
数据采集协同架构,集成马扎克、西门子、海德汉、广数、凯恩帝、三菱、海德汉、兄弟、哈斯、宝元、新代、发那科、华中各类数控以及各类PLC数据采集软件
文章目录 前言一、采集协同架构是什么?可以做什么(数控、PLC配置采集)?二、使用步骤 1.打开软件,配置MQTT或者数据库(支持sqlserver、mysql等)存储转发消息规则2.配置数控系统所采集的参数、转…...
Allegro172版本如何用自带的功能实现快速在1MMBGA下方等距放置电容
Allegro172版本如何用自带的功能实现快速在1MMBGA下方等距放置电容 在做PCB设计的时候,在1MM中心间距的BGA背面放置电容,是非常常见的设计,如何快速把电容等距放在BGA下方,除了借助辅助工具外,在Allegro升级到了172版本的时候,可以借助本身自带的功能实现快速放置,以下图…...
一种简单的统计pytorch模型参数量的方法
nelememt()函数Tensor.nelement()->引自Tensor.numel()->引自torch.numel(input)三者的作用是相同的Returns the total number of elements in the inputtensor.返回当前tensor的元素数量利用上面的函数刚好可以统计模型的参数数量parameters()函数Module.parameters(rec…...
【PyTorch】教程:对抗学习实例生成
ADVERSARIAL EXAMPLE GENERATION 研究推动 ML 模型变得更快、更准、更高效。设计和模型的安全性和鲁棒性经常被忽视,尤其是面对那些想愚弄模型故意对抗时。 本教程将提供您对 ML 模型的安全漏洞的认识,并将深入了解对抗性机器学习这一热门话题。在图像…...
中国区使用Open AI账号试用Chat GPT指南
最近推出强大的ChatGPT功能,各大程序员使用后发出感叹:程序员要失业了 不过在国内并不支持OpenAI账号注册,多数会提示: OpenAI’s services are not available in your country. 经过一番搜索后,发现如下方案可以完…...
STM32开发(9)----CubeMX配置外部中断
CubeMX配置外部中断前言一、什么是中断1.STM32中断架构体系2.外部中断/事件控制器(EXTI)3.嵌套向量中断控制器(NIVC)二、实验过程1.CubeMX配置2.代码实现3.硬件连接4.实验结果总结前言 本章介绍使用STM32CubeMX对引脚的外部中断进…...
Nextjs了解内容
目录Next.jsnext.js的实现1,nextjs初始化2, 项目结构3, 数据注入getInitialPropsgetServerSidePropsgetStaticProps客户端注入3,CSS Modules4,layout组件5,文件式路由6,BFF层的文件式路由7&…...
从事功能测试1年,裸辞1个月,找不到工作的“我”怎么办?
做功能测试一年多了裸辞职一个月了,大部分公司都要求有自动化测试经验,可是哪来的自动化测试呢? 我要是简历上写了吧又有欺诈性,不写他们给的招聘又要自动化优先,将项目带向自动化不是一个容易的事情,很多…...
机器学习基本原理总结
本文大部分内容参考《深度学习》书籍,从中抽取重要的知识点,并对部分概念和原理加以自己的总结,适合当作原书的补充资料阅读,也可当作快速阅览机器学习原理基础知识的参考资料。 前言 深度学习是机器学习的一个特定分支。我们要想…...
JVET-AC0315:用于色度帧内预测的跨分量Merge模式
ECM采用了许多跨分量的预测(Cross-componentprediction,CCP)模式,包括跨分量包括跨分量线性模型(CCLM)、卷积跨分量模型(CCCM)和梯度线性模型(GLM)࿰…...
Session与Cookie的区别(二)
脸盲症的困扰 小明身为杂货店的店长兼唯一的店员,所有大小事都是他一个人在处理。传统杂货店跟便利商店最大的差别在哪里?在于人情味。 就像是你去菜市场买菜的时候会被说帅哥或美女,或者是去买早餐的时候老板会问你:「一样&#…...
疫情开发,软件测试行情趋势是怎么样的?
如果说,2022年对于全世界来说,都是一场极大的挑战的话;那么,2023年绝对是机遇多多的一年。众所周知,随着疫情在全球范围内逐步得到控制,无论是国际还是国内的环境,都会呈现逐步回升的趋势&#…...
Java中间件描述与使用,面试可以用
myCat 用于切分mysql数据库(为什么要切分:当数据量过大时,mysql查询效率变低) ActiveMQ 订阅,消息推送 swagger 前后端分离,后台接口调式 dubbo 阿里的面向服务RPC框架,为什么要面向服务&#x…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
