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是最先进的分布式版本控制系统。 版本控制系统——自动记录系统中文件的改动情况࿰…...
【hello, world】计算机系统漫游
文章目录hello程序信息就是位 上下文程序被其他程序翻译成不同的格式预处理阶段编译阶段汇编阶段链接阶段了解编译系统如何工作是大有益处的优化程序性能理解链接时出现的错误避免安全漏洞处理器读并解释储存在内存中的指令系统的硬件组成总线I/O设备主存处理器运行hello程序高…...
1. SpringMVC 简介
文章目录1. SpringMVC 概述2. SpringMVC 入门案例2.1 入门案例2.2 入门案例工作流程3. bean 加载控制4. PostMan 工具1. SpringMVC 概述 SpringMVC 与 Servlet 功能等同,均属于 Web 层开发技术。SpringMVC 是 Spring 框架的一部分。 对于 SpringMVC,主…...
《解谜三星堆:开启中华文明之门》-范勇 笔记
甲篇 应重视民间流传的疑似三星堆的文物,对其展开充分的研究,以发现更多关于三星堆的秘密,并且避免“敦煌窘境”,让我国的三星堆学术研究处于世界领先地位!(书中就讲到了在民间首次发现了圆形玉器…...
锐捷(十四)mpls vxn optionc的关键问题所在和具体问题分析
用锐捷的设备搭建mpls vxn optionc的基础版和带RR的版本,在控制平面和转发平免上分析mpls vxn optionc的关键问题所在和具体问题分析。一 基础mpls vxn optionc:核心:两pe之间之间建立MP EBGP邻居,从而直接传递路由解放了ASBR。关…...
Python语言零基础入门教程(十四)
Python 日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。 时间间隔是以秒为单位的浮点小数。 每个时间戳都以自从1970年1月1日午夜(历元&…...
Https 协议超强讲解(一)
都说Https协议非常安全,那为什么还是会被抓包呢?抓包后会影响什么吗? HTTPS协议 随着 HTTPS 建站的成本下降,现在大部分的网站都已经开始用上 HTTPS 协议。大家都知道 HTTPS 比 HTTP 安全,也听说过与 HTTPS 协议相关…...
5.Redis 实现点赞 优化登陆(验证码 token..)
Redis(1)简介Redis 是一个高性能的 key-value 数据库原子 – Redis的所有操作都是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。非关系形数据库数据全部存在内存中,性能高。(2&#…...
scscanner:一款功能强大的大规模状态码扫描工具
关于scscanner scscanner是一款功能强大的大规模状态码扫描工具,该工具可以帮助广大研究人员从一个URL列表文件中批量读取目标网站的状态码响应信息。除此之外,该工具还可以过滤出指定的状态码,并将结果存储到一个文件中以供后续深入分析使用…...
Word 和 LaTeX 文档相互转换
Word 和 LaTeX 文档相互转换 目前可以找到两种工具完成将 LaTeX\LaTeXLATEX 文档向 Word 文档的转换, 分别为 Tex2Word和LaTeX-to-Word。 Tex2Word 安装Tex2Word后, 启动 Word, 打开你要转换的 LaTeX\LaTeXLATEX 源文件 (注意,如果没有成功安装 Tex2Word,那么你无法读取…...
python自动发送邮件实现
目录1 前言2 准备工作2.1 电子邮件的基础知识。2.2 python邮件库2.3 邮箱设置3 python实现邮件自动发送3.1 SMTP()和send()方法介绍3.2 python实现实例参考信息1 前言 python功能强大,可以实现我们日常办公的很多任务。诸如批量处理word,excel,pdf等等文件…...
ccc-Classification-李宏毅(4)
文章目录Classification 概念Example ApplicationHow to do ClassificationWhy not RegesssionProbability from Class - FeatureProbability from ClassHow’s the results?Modifying ModelThree StepsProbability DistributionClassification 概念 本质是找一个函数&#x…...
Kubernetes + Docker 部署一个yolov5检测服务(基于FastDeploy)
Kubernetes Docker 从零部署一个yolov5检测服务,服务基于PaddlePaddle/FastDeploy的服务化部署;所有软件从零安装。 文章目录1.说明2.环境3.安装过程 3.1安装 Docker 3.2安装 minikube 3.3安装 Kubectl4.部署过程 4.1 Docker相关 4.2 k8s相关 4.3 启动服…...
【C++/QT】QT5.6解析Excel教程(qtxlsx)
这里写目录标题【背景】【下载qtxlsx】【安装perl】【编译qtxlsx】【添加模块】【使用qtxlsx】【背景】 新接触QT,很多东西都不会,刚接触一个解析Excel的demo,记录一下安装、编译、解析Excel的过程 【下载qtxlsx】 在解析之前,…...
C++之智能指针
前言普通指针的不足new和new门的内存需要用delete和delete[释放。程序员的主观失误,忘了或漏了释放程序员也不确定何时释放(例如多个线程共享同一个对象,没办法确定什么时候释放)普通指针的释放类内的指针,在析构函数中…...
Redis实战-session共享之修改登录拦截器
在上一篇中Redis实战之session共享,我们知道了通过Redis实现session共享了,那么token怎么续命呢?怎么刷新用户呢?本来咱们就通过拦截器来实现这两个功能。 登录拦截器优化: 先来看看现在拦截器情况: 拦截…...
数据可视化,流程化处理pycharts-
本文直接进入可视化,输入讲解输入列表生成图片,关于pandas操作看这篇pandas matplotlib 导包后使用 import matplotlib.pyplot as plt饼图 使用 plt.figure 函数设置图片的大小为 15x15 使用 plt.pie 函数绘制饼图,并设置相关的参数&…...
1626_MIT 6.828 lab1课程大纲学习过程整理
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 现在lab1的内容全都学习完了,该做的练习也都做了。接下来,整理一下自己看这一部分课程讲义的一些笔记。 整理之前,先把自己完成…...
12月无情被辞:想给还不会自动化测试的技术人提个醒
公司前段时间缺人,也面了不少测试,结果竟没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但是平均水平很让人失望。基本能用一句话概括就是:3年测…...
开发必备技术--docker(使用篇)
文章目录前言Docker的基本概念概念数据卷虚拟网络镜像操作镜像名称镜像命令容器操作基本操作容器创建数据卷操作创建和查看数据卷其他指令实战前言 续接上一篇博文: 开发必备技术–docker(一) 这也是开学了,假期的最后一篇博文&a…...
2023备战金三银四,Python自动化软件测试面试宝典合集(三)
马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试,一个程序员成长之路永恒绕…...
TortoiseGit 使用教程
一、下载工具 这里给大家准备了所有安装包自取 链接:https://pan.baidu.com/s/1xrxxgyNXNQEGD_RjwKnPMg 提取码:qwer 也可在官网自行下载最新版 1.下载git,直接去官网下载Git - Downloads,根据自己的系统合理下载,…...
Linux项目自动化构建工具make/Makefile
本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 目录 前言 正文 makefile文件与语法规则 make指令与执行逻辑 makefile任务刷新策略 .PHONY修饰为伪目标 最后 前言 会不会写makefile,从一个侧面…...
M100嵌入式自动吞吐式读写器|电动读卡机如何通过C#程序读取社保卡号
M100嵌入式自动吞吐式读写器|电动读卡机是一款双保护门功能读卡器,第一层防尘防异物机械门,第二层电动门。 M100嵌入式自动吞吐式读写器|电动读卡机采用耐高温、耐磨擦、高强度、抗老化的复合型塑胶为主体,在走卡通道两侧镶有不锈钢金属&…...
STM32----搭建Arduino开发环境
搭建Arduino开发环境前言一、Arduino软件1.软件下载2.软件安装3.软件操作二、Cortex官方内核三、烧录下载四、其他第三方内核1.Libmaple内核2.Steve改进的LibMaple 内核3.STMicroelectronics(ST)公司编写的内核总结前言 本章介绍搭建STM32搭建Arduino开发环境,包括…...
华为OD机试 - 事件推送(Python),真机试题
事件推送 题目 同一个数轴 X 上有两个点的集合 A={A1, A2, …, Am} 和 B={B1, B2, …, Bn}, Ai 和 Bj 均为正整数,A、B 已经按照从小到大排好序,A、B 均不为空, 给定一个距离 R (正整数), 列出同时满足如下条件的所有(Ai, Bj)数对: Ai <= BjAi, Bj 之间的距离小于…...
论如何获取CSDN原力
0x00 前言 因为个人需求,所以需要增长原力值,故对原力值的增长方式进行探索和总结。 0x01 正文 参考:https://blog.csdn.net/SoftwareTeacher/article/details/114499372 1.举报了劣质内容(博客,下载的资源&#x…...
流程引擎之发展史及对比总结
流程引擎渊源市场上比较有名的开源流程引擎有 jBPM、Activiti、Camunda、Flowable 和 Compileflow。其中 jBPM、Activiti、Flowable、camunda 四个框架同宗同源,祖先都是 jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。而 Compile…...
【DSView逻辑分析抓取波形CAN步骤-硬件连接-数据解析-底层波形认识CAN-工具使用】
【DSView逻辑分析抓取波形CAN步骤-硬件连接-数据解析-底层波形认识CAN】1、概述2、实验环境3、写在前面的一个问题4、实验准备(1)硬件连接1)CAN卡连接开发板(2)逻辑分析仪连接开发板(2) CAN卡连接软件&…...
C++中的模板
1.模板C 的模板一直是这门语言的一种特殊的艺术,模板甚至可以独立作为一门新的语言来进行使用。模板的哲学在于将一切能够在编译期处理的问题丢到编译期进行处理,仅在运行时处理那些最核心的动态服务,进而大幅优化运行期的性能。因此模板也被…...
专门做日租房的网站/公司网站制作流程
1.如何获得当前文件路径常用:(1).Test.class.getResource("")得到的是当前类FileTest.class文件的URI目录。不包括自己!(2).Test.class.getResource("/")得到的是当前的classpath的绝对URI路径。(3).Thread.currentThread().getCont…...
西安网站开发公司怎么选/免费二级域名查询网站
原文连接 https://www.cnblogs.com/lentoo/p/9539137.html 博主写的很详细,需要的同学可以看原文连接,这里照搬过来感觉没什么意思! 还有一篇很不错的文章 从买域名到使用pm2部署node.js项目全过程 https://www.jianshu.com/p/70ced477e5bd...
如何做网站/真正永久免费网站建设
一、查看Linux系统版本的命令(3种方法)1、cat /etc/issue,此命令也适用于所有的Linux发行版。[rootS-CentOS home]# cat /etc/issueCentOS release 6.5 (Final)Kernel \r on an \m2、cat /etc/redhat-release,这种方法只适合Redhat系的Linux:…...
有用unity做网站的吗/个人建网站需要多少钱
数字营销,也就是网络营销,即在线推广你的产品或服务。 其核心的是:在正确的客户面前在线推广正确的产品 Right Customer Right Product Online 一、关于市场研究 网络营销中,最重要的第一步是市场研究(Marketing Res…...
如何做好政府门户网站建设/百度投诉中心人工电话
每日感悟: 当把努力养成一种习惯时,说明你已经改变了很多。 前言 使用python进行格式化输出时,问题遇到一些小问题,所以彻底做一次大总结。 在python中进行格式化输出有两种方式: 百分号方式、Format方式 (…...
给朋友做的相册网站没有了/信息检索关键词提取方法
原文地址:http://www.cnblogs.com/GXZlegend/p/6832537.html 题目描述 有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些请求.一个搬运工从第i个请求的位置把东西搬到第j个请求的位置需要一…...