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模型,操作系统通知我们的时候,要么就是连接已经帮我建立好,客户端套接字帮我们准备好;要么就是数据已经接收完成&#…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14
什么是 Pattern Matching(模式匹配) ❝ 模式匹配就是一种“描述式”的写法,不需要你手动判断、提取数据,而是直接描述你希望的数据结构是什么样子,系统自动判断并提取。❞ 你给的定义拆解: ✴ Instead of …...