git笔记-简单入门
git笔记
git是一个分布式版本控制系统,它的优点有哪些呢?分为以下几个部分
- 与集中式的版本控制系统比起来,不用担心单点故障问题,只需要互相同步一下进度即可。
- 支持离线编辑,每一个人都有一个完整的版本库。
- 跨平台支持
- 性能高效
安装和初始化配置
git的安装方式有方式
- 带GUI的git,带有图形化界面
- 命令行安装
个人比较推荐命令行安装的方式,我采用的是centos 7.x的系统
- 添加 CentOS/RHEL 7 存储库
sudo yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
- yum安装git
sudo yum install git -y
初始化git
- 配置用户名
git config --global user.email '你的邮箱'
- 配置邮箱
git config --global user.email '你的密码'
创建仓库
在git中,创建仓库有两种方式
- 使用git init
git init
- git init reop name
git init name
- 从gitee/github已有的仓库,创建仓库(使用clone的方式)
git clone git@gitee.com:tmeermer/hnys.git
工作区和文件状态

git有三个工作区域分为工作区,暂存区,本地仓库。现在来简单解释一下这三个区域
工作区:当前的工作目录,所有的操作都在这里进行
暂存区:工作区完成工作后,将产生的文件推送到暂存区,临时保存这些文件。可以理解为一个临时的杂货铺
本地仓库:这里存放最终的成品,也就是仓库。
添加和提交文件
- 添加文件
git add filename
添加时后面需要添加文件名,也可使用通配符进行批量提交
git add *.txt
现在该命令就只会提交以txt为后缀的文件了,当然也可以使用.来提交当前文件夹下的所有文件
git add .
- 提交文件
git commit -m "这是第一次提交"
- -m参数的含义是说明此次提交的主要信息,如果不加上m参数,git会默认打开vim编辑器,来输入提交的信息
- 查看提交状态
git status;

其中查看提交日志的命令是
git log
也可以加上参数查看简洁的提交日志
git log --oneline

其中有邮箱和名称,都是通过我们之前使用的config命令来配置的。
git reset 回退版本
在日常开发的时候,我们通常都有进行版本回退的需求。就可以使用reset这个命令以下是它的每个参数含义

soft参数的含义是:回退到某一次的提交位置,但是工作区和暂存区的内容是保存的
·hard·参数的含义是:回到某一次的提交位置,但是工作区和暂存区的内容全部丢弃
mixed参数介于sort和hard中间,工作区的内容保留但是暂存区的内容删除
soft测试
现在来测试soft参数的命令产生的作用
echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt

现在创建了三个txt的文件并且使用了以下命令进行提交,分为三次
git add file1.txt
git commit -m "第一次提交"
git add file2.txt
git commit -m "第二次提交"
git add file3.txt
git commit -m "第三次提交"
查看提交结果

现在是已经有三次提交了,现在回退到第二次提交 7b6b999
git reset --soft 7b6b999

可以发现真的回退到了第二次提交这个位置,而且暂存区和工作区的文件都没有被丢弃

在提交的过程中出现了nothing to commit, working tree clean问题,原因是:
暂存区没东西获或者东西都提交到版本库中的当前分支,且工作区
中的文件都被git跟踪了(都git add .)
解决方案:修改需要提交的文件中的任何一处(空格都行),然后重新add,commit。
hard测试
现在来测试hard参数会产生什么样的效果,分为了三个文件夹进行测试
echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt
先创建三个txt文件,都进行依次提交
git add file1.txt
git commit -m "这是第一次提交"
git add file2.txt
git commit -m "这是第二次提交"
git add file3.txt
git commit -m "这是第三次提交"

进行回退操作,回退至d7a1e8a

测试发现,暂存区和工作区的文件的file3.txt都被丢弃了。
hard参数的话,需要慎用!
mixed测试
现在来测试mixed参数,还是添加三个txt文件
echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt
依次进行提交
git add file1.txt
git commit -m "这是第一次提交"
git add file2.txt
git commit -m "这是第二次提交"
git add file3.txt
git commit -m "这是第三次提交"
进行回退操作,回退至第二次提交:d02077e
git reset --mixed d02077e
查看暂存区和目录下的文件状态

可以发现工作区的文件还在,但是暂存区的不存在了,此时HEAD指针指向了第二次提交的位置。
git diff 查看差异
当需要查看工作区和暂存区的内容是否有差异时,需要使用以下命令查看差异
git diff

需要查看之前任意的几个版本的差异
git diff HEAD~X HEAD
也可直接使用来查看最后一个版本之前的差异
git diff HEAD
git diff HEAD~ HEAD
还可以在后面加上文件名,只查看该文件的差异
git diff HEAD~1 HEAD file2.txt
每次提交都有一个哈希值,也可以使用这个值来判断这两次提交之间的差异
git diff d7a1e8a 9a857be

使用git rm 删除文件
在使用git时,想删除本地工作区和暂存区的文件时,如果使用Linux的系统命令的话会比较麻烦
rm file1.txt

删除完查看状态,可以发现在工作区的文件已显示被删除了,还需要使用以下命令来更新,这里的提交是要告诉暂存区,在下一次提交的时候file1.txt已经被删除了!
git add .
git commit -m "delete file1.txt"

但是git给我们提供了 git rm 命令,可以让操作变得更简单
git rm file
测试一下、
git rm file2.txt

这次可以发现,暂存区和工作区都同步被删除了,这就是 git rm命令的作用。

.gitgnore忽略文件
这个文件的作用是,让我们忽略掉一些不应该加入到版本库中的文件,这样可以让我们的版本库变得更加干净和更小

这是我们需要忽略的文件,以免带来不必要的风险
现在向我们的本地仓库中添加.gitignore文件
echo "acess.log" > .gitignore
vim .gitignore
// 添加如下内容
access.log
*.log
添加到暂存区
git add .
提交到本地仓库
git commit -am "full submit"
查看效果

可以发现我们创建的日志文件并没有被提交到缓存区。
如果打算要忽略全部的日志文件,可以参考以下写法
*.log
# 忽略temp目录下的文件
temp/
关联本地仓库和远程仓库
之前演示的都是本地仓库进行的提交和各种测试,但是在实际的生产环境中往往都是需要连接到远程仓库进行提交和各种其他操作。但是先决条件是配置好了ssh密钥,平台可以选择github/gitee。其中gitee相当于国内的gihub,速度较快。
- 登录gitee设置ssh公钥(已省略,具体步骤可自行查阅)
网址:gitee
- clone远程仓库到本地,并且同步提交到远程的master分支
git remote -v 查看有没有远程仓库
git init .
git clone git@gitee.com:tmeermer/c-language-practice-code.git
//注:项目地址形式为:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git
git add .
git commit -m "commit"
git push origin master
将本地的master分支推送到远程的master分支,如果不存在则会覆盖

分支管理
git中的分支可以看作一棵树上的枝干,最粗壮的是主分支,其他分支都是从分支。git中的主分支叫做master,通常主分支都是用来发布重大更新的,其他开发和测试的过程都是在开发分支上完成的。测试通过后才会合并进主分支。
- git如何查看当前分支?
git branch
- git如何创建分支?
git checkout dev
git status
- git中如何切换分支?
git checkout branch--name
- git中如何合并分支?
git memger branch--name
- git中如何删除无用的分支?
git branch -d branch--name
git解决合并冲突
现在来模拟两个两个分支修改了同一处的情况,这样会导致git发生合并冲突,从而合并失败

在以上操作中,我们在两个分支中提交了一样的内容,导致了冲突。
git init myproject# 创建master分支
git checkout -b master# 向文件内写入内容
echo "This is a line added in feature-branch." > example.txtvim example.txt
```
"This is a line added in feature-branch."
测试
```
git add .
git commit -m "feat commit "# 创建feat-branch 分支
git checkout -b feat-branchvim example.txt
```
"This is a line added in feature-branch."
测试
```
git add .
git commit -m "feat commit "git checkout mastergit merge master# 合并分支失败
git status

现在解决冲突需要修改
切换到master分支git checkout master
vim example.txt找到冲突的行修改的行进行修改git add .
git commit -m "commit this a master"切换到feat分支
git checkout feat-branch
修改冲突的位置
git add .
git commit -m "commit this a feat-branch"最后合并冲突
git merge master

以上就是如何解决git分支冲突的方法。
回退和rebase
分支的合并可以使用git merge 命令来进行合并,并且还会保存所有的提交记录。git 还有另一种合并分支的方式就是使用rebase
git rebase feat-branch
rebase的翻译叫做变基,在git中我们可以这么理解
首先rebase只能在主分支上提交吗?其实不是的
它可以在任意分支上执行,如果是在main分支上执行
git rebase dev
则main上的提交记录会变基到dev分支的末尾
如果是在dev分支上提交
git rebase main
dev的两条提交记录都会变基到Main分支上。只是顺序不同罢了

相关文章:
git笔记-简单入门
git笔记 git是一个分布式版本控制系统,它的优点有哪些呢?分为以下几个部分 与集中式的版本控制系统比起来,不用担心单点故障问题,只需要互相同步一下进度即可。支持离线编辑,每一个人都有一个完整的版本库。跨平台支持…...
Joplin 插件在Vscode中无法显示图片
1.问题 在vscode里面装好joplin插件之后,无法显示图片内容。 粘贴的图片可以再vscode中显示,无法再joplin客户端显示 2.解决方法 这种情况是因为和vscode自带的MD编辑器的预览模式有冲突,或者没用通过专用方式上传图片。 方法一ÿ…...
python学opencv|读取图像(四十七)使用cv2.bitwise_not()函数实现图像按位取反运算
【0】基础定义 按位与运算:两个等长度二进制数上下对齐,全1取1,其余取0。按位或运算:两个等长度二进制数上下对齐,有1取1,其余取0。 按位取反运算:一个二进制数,0变1,1变0。 【1】…...
pandas分组
分组 分组的关键要素是: 分组依据、数据来源、操作及其返回结果。 df.groupby(分组依据)[数据来源].使用操作对学生按照性别统计身高中位数。 print(df.groupby(Gender)[Height].median())上面是一维度进行分组,如果要根据多个维度分组,则…...
爬虫基础(三)Session和Cookie讲解
目录 一、前备知识点 (1)静态网页 (2)动态网页 (3)无状态HTTP 二、Session和Cookie 三、Session 四、Cookie (1)维持过程 (2)结构 正式开始说 Sessi…...
【Super Tilemap Editor使用详解】(十三):快捷键指南(Keyboard Shortcuts)
在使用 Super Tilemap Editor 进行图块地图编辑时,键盘快捷键可以显著提高工作效率。本文将详细介绍常用的快捷键及其功能,帮助你更快地完成图块绘制、翻转、旋转以及工具切换等操作。 一、快捷键文件位置 所有键盘快捷键的定义可以在以下路径找到&…...
【Leetcode 每日一题】119. 杨辉三角 II
问题背景 给定一个非负索引 r o w I n d e x rowIndex rowIndex,返回「杨辉三角」的第 r o w I n d e x rowIndex rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 数据约束 0 ≤ r o w I n d e x ≤ 33 0 \le rowIndex \le 33 …...
简单看看会议系统2(时延分析)(TODO)
(TODO) eBPF (extended Berkeley Packet Filter) 可以用来跟踪和分析树莓派 5 或其他 Linux 系统中的各种活动,包括拍摄和数据传输过程的性能分析。eBPF 是一个强大的内核级工具,可以在不修改内核源码的情况下,动态地跟…...
Linux中 端口被占用如何解决
lsof命令查找 查找被占用端口 lsof -i :端口号 #示例 lsof -i :8080 lsof -i :3306 netstat命令查找 查找被占用端口 netstat -tuln | grep 端口号 #示例 netstat -tuln | grep 3306 netstat -tuln | grep 6379 ss命令查找 查找被占用端口 ss -tunlp | grep 端口号 #示例…...
OpenAI o3-mini全面解析:最新免费推理模型重磅发布
引言 2025年1月31日,OpenAI重磅发布全新推理模型o3-mini。这款模型作为OpenAI推理系列的最新突破,不仅在性能和性价比方面实现跨越式提升,更是首次全面开放免费使用。这一重大举措彰显了OpenAI在人工智能技术普及和成本优化领域的创新决心。…...
C++:虚函数与多态性习题2
题目内容: 编写程序,声明抽象基类Shape,由它派生出3个派生类:Circle、Rectangle、Triangle,用虚函数分别计算图形面积,并求它们的和。要求用基类指针数组,使它每一个元素指向一个派生类对象。 …...
利用metaGPT多智能体框架实现智能体-1
1.metaGPT简介 MetaGPT 是一个基于大语言模型(如 GPT-4)的多智能体协作框架,旨在通过模拟人类团队的工作模式,让多个 AI 智能体分工合作,共同完成复杂的任务。它通过赋予不同智能体特定的角色(如产品经理、…...
Kubernetes组成及常用命令
Pods(k8s最小操作单元)ReplicaSet & Label(k8s副本集和标签)Deployments(声明式配置)Services(服务)k8s常用命令Kubernetes(简称K8s)是一个开源的容器编排系统,用于自动化应用程序的部署、扩展和管理。自2014年发布以来,K8s迅速成为容器编排领域的行业标准,被…...
oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]
把多个查询结果上下合并, 即, 通过操作符将多个 SELECT 语句的结果集合并为一个结果集。虽然联合查询通常用于从多个表中检索数据,但它也可以用于从同一个表中检索不同的数据集。 联合查询: 交集,并集,差集 默认的排序规则通常是基于查询结果集中的列的自然顺序。…...
力扣第149场双周赛
文章目录 题目总览题目详解找到字符串中合法的相邻数字重新安排会议得到最多空余时间I3440.重新安排会议得到最多空余时间II 第149场双周赛 题目总览 找到字符串中合法的相邻数字 重新安排会议得到最多空余时间I 重新安排会议得到最多空余时间II 变成好标题的最少代价 题目…...
AI开发之 ——Anaconda 介绍
Anaconda 是什么? 在这里插入图片描述 一句话:Anaconda 是Python 库和环境便捷管理的平台。 Anaconda 是数据科学和 AI 领域的工具,通过集成常用库和工具,简化了环境管理和包安装,特别适合初学者和需要快速上手的开…...
Spring中ObjectProvider的妙用与实例解析
在Spring框架中,ObjectProvider是一个非常实用的接口,它可以帮助我们解决一些复杂的依赖注入问题,尤其是当我们需要注入生命周期较短的bean时。与传统的javax.inject.Provider相比,ObjectProvider在Spring 5.0中引入了许多新方法&…...
Easy系列PLC尺寸测量功能块(激光微距应用)
激光微距仪可以测量短距离内的产品尺寸,产品规格书的测量 精度可以到0.001mm。具体需要看不同的型号。 1、激光微距仪 2、尺寸测量应用 下面我们以测量高度为例子,设计一个高度测量功能块,同时给出测量数据和合格不合格指标。 3、高度测量功能块 4、复位完成信号 5、功能…...
当卷积神经网络遇上AI编译器:TVM自动调优深度解析
从铜线到指令:硬件如何"消化"卷积 在深度学习的世界里,卷积层就像人体中的毛细血管——数量庞大且至关重要。但鲜有人知,一个简单的3x3卷积在CPU上的执行路径,堪比北京地铁线路图般复杂。 卷积的数学本质 对于输入张…...
《网络编程基础之完成端口模型》
【完成端口模型导读】完成端口模型,算得上是真正的异步网络IO模型吧,相对于其它网络IO模型,操作系统通知我们的时候,要么就是连接已经帮我建立好,客户端套接字帮我们准备好;要么就是数据已经接收完成&#…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...
