git的简单介绍和使用
git学习
- 1. 概念
- git和svn的区别和优势
- 1.1 区别
- 1.2 git优势
- 2. git的三个状态和三个阶段
- 2.1 三个状态:
- 2.2 三个阶段:
- 3. 常用的git命令
- 3.1 下面是最常用的命令
- 3.2 git命令操作流程图如下:
- 4. 分支内容学习
- 4.1 项目远程仓库
- 4.2 项目本地仓库
- 4.3 生产环境从远程master分支拉取打包,暂不设置“integration manager”角色,每位开发人员均可以向master分支合并。
- 5. 具体开发步骤
- 6. 如何解决冲突
- 7. 减少冲突的方法
- 8. 关于对冲突和合并的理解
- 9. 补充其他可能用的命令
- 9.1 对象库操作相关命令
- 9.2 数据传输相关命令
- 9.3 分支相关命令
- 9.3.1 git branch 分支管理
- 9.3.2 git checkout 切换或新建分支
- 9.3.3 git merge 分支合并
1. 概念
Git是一个免费和开源的分布式版本控制系统。相较于SVN具有便于本地分支等特性。
git和svn的区别和优势
1.1 区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
1.2 git优势
- 容易分支;git鼓励创建一个或多个本地分支进行开发且代价极小。与此对应SVN的分支基本上等于将整个项目进行拷贝,成本大。
- 速度快;大部分操作都在本地进行,如查看提交记录。但是在拉取的时候会慢,SVN拉取的是最新版本,而GIT会拉取整套版本;
- 分布式;与SVN集中式管理相比,GIT每个用户都是主服务的一个完整备份;
- 有暂存区;可用于提交部分文件;
- 数据安全;每个文件与每次提交都会被验证
2. git的三个状态和三个阶段
- 三个状态:已修改,已暂存,已提交
- 三个阶段:工作区,暂存区,仓库
三个状态分别对应三个阶段
2.1 三个状态:
已修改(modified):表示修改了文件,但还没保存到仓库中。
已暂存(staged):已暂存,表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交(committed):表示数据已经安全地保存在
本地仓库中。
2.2 三个阶段:
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
工作区(Working Directory):对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区(Staging Area):保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
仓库(Repository): Git用来保存项目的元数据和对象数据库的地方,分为本地仓库与远程仓库。
3. 常用的git命令
3.1 下面是最常用的命令
| 序号 | 命令 | 名称 | 描述 |
|---|---|---|---|
| 1 | git clone | 克隆 | 复制远程仓库包含历史版本在内的几乎所有数据至本地仓库。 |
| 2 ❤ | git pull | 拉取 | 将远程仓库的最新内容数据下载到你的本地仓库并尝试合并。 |
| 3 ❤ | git fetch | 获取 | 将远程仓库的最新内容数据下载到你的本地仓库但不会自动合并。 |
| 4 | git checkout | 检出 | 多用途命令,从Git仓库提取文件、撤销修改、切换分支等。 |
| 5 | git diff | 比较未暂存文件与最后一次提交的文件或者已暂存文件差异。 | |
| 6 ❤ | git add | 跟踪 | 跟踪新文件并使之处于暂存状态或合并时将冲突文件标识为已解决等。 |
| 7 ❤ | git commit | 提交 | 将未暂存的或已暂存的文件保存至本地仓库。 |
| 8 ❤ | git push | 推送 | 将文件推送到远程仓库。 |
| 9 | git log | 查看提交历史。 | |
| 10❤ | git branch | 分支 | 创建或查看分支。 |
| 11❤ | git merge | 合并 | 合并分支。 |
3.2 git命令操作流程图如下:

4. 分支内容学习
4.1 项目远程仓库
共分为两个分支。
-
master分支:主干分支。用于发布生产环境。
-
dev分支:开发分支。(一般我们都是从dev拉取版本)接收本地dev分支的合并。测试无误后才合并至master分支,后续根据情况决定是否建立测试分支。
4.2 项目本地仓库
-
包括一个dev分支与多个功能及bug修复分支。
-
dev分支用来合并其它功能分支的提交,同时用来推送远程dev分支。
-
功能分支及bug修复分支是临时分支,用于开发具体功能和修复bug,开发完成合并至本地dev分支后可删除;
注意线上的bug修改分支需要从远程master分支进行拉取。
4.3 生产环境从远程master分支拉取打包,暂不设置“integration manager”角色,每位开发人员均可以向master分支合并。
5. 具体开发步骤
-
拉取远程最新提交的dev分支至本地dev分支,保证本地dev分支代码为最新版本。
-
从本地dev分支拉取新的功能分支dev-temp-xxx并在其上进行开发
就是新建一个dev-temp-xxx分支
-
本地功能开发分支在开发完成并且自测无误后进行代码提交commit(commit是提交到本地仓库)。
ps:只是提交到本地仓库,并不是合并merge;
每个temp分支和dev都有指针指向自己的版本,在没有合并之前是不会产生新的版本的;
-
切换到本地dev分支从远程dev分支拉取最新提交。
保证本地dev最新;因为在我们第一次拉取远程dev进行功能开发期间,可能其他人已经push了一个版本修改了相同的功能,这个时候我们就得重新拉取远程dev到本地dev,以便于解决 / 避免冲突
-
将功能分支dev-temp-xxx合并(merge)到本地dev分支,此过程可能产生冲突,解决冲突。
再本地dev重新拉取以后,我们在把temp分支合并到本地
-
推送本地dev分支到远程dev分支。
-
将新建的功能分支dev-temp-xxx删除。
个人 具体理解如下:

6. 如何解决冲突
-
冲突发生时首先备份自己开发的内容。
-
然后用他人的版本解决冲突。
舍弃自己的版本,直接用他人的版本作为merge的父类;
-
将自己新开发的内容回添到已解决冲突的文件中。
不是简单的复制粘贴上去
-
提交。
7. 减少冲突的方法
-
任务分解时功能独立;
-
开发前拉取代码;(尽量早拉取)
-
开发测试完成后及时提交代码。(尽快早提交)
8. 关于对冲突和合并的理解
- 冲突的解决,分支的合并都是在本地的;
- 本地的dev分支版本,都是高于拉取时远程dev的版本,所以在本地合并(merge)之前得重新拉去最新的远程dev分支
9. 补充其他可能用的命令
| 命令 | 简要说明 |
|---|---|
| git add | 添加至暂存区 |
| git add–interactive | 交互式添加 |
| git apply | 应用补丁 |
| git am | 应用邮件格式补丁 |
| git annotate | 同义词,等同于 git blame |
| git archive | 文件归档打包 |
| git bisect | 二分查找 |
| git blame | 文件逐行追溯 |
| git branch 分支相关 | 分支管理 |
| git cat-file | 版本库对象研究工具 |
| git checkout 分支相关 | 检出到工作区、切换或创建分支 |
| git cherry-pick | 提交拣选 |
| git citool | 图形化提交,相当于 git gui 命令 |
| git clean | 清除工作区未跟踪文件 |
| git clone | 克隆版本库 |
| git commit | 提交 |
| git config | 查询和修改配置 |
| git describe | 通过里程碑直观地显示提交ID |
| git diff | 差异比较 |
| git difftool | 调用图形化差异比较工具 |
| git fetch | 获取远程版本库的提交 |
| git format-patch | 创建邮件格式的补丁文件。参见 git am 命令 |
| git grep | 文件内容搜索定位工具 |
| git gui | 基于Tcl/Tk的图形化工具,侧重提交等操作 |
| git help | 帮助 |
| git init | 版本库初始化 |
| git init-db* | 同义词,等同于 git init |
| git log | 显示提交日志 |
| git merge 分支相关 | 分支合并 |
| git mergetool | 图形化冲突解决 |
| git mv | 重命名 |
| git pull | 拉回远程版本库的提交 |
| git push | 推送至远程版本库 |
| git rebase | 分支变基 |
| git rebase–interactive | 交互式分支变基 |
| git reflog | 分支等引用变更记录管理 |
| git remote | 远程版本库管理 |
| git repo-config* | 同义词,等同于 git config |
| git reset | 重置改变分支“游标”指向 |
| git rev-parse | 将各种引用表示法转换为哈希值等 |
| git revert | 反转提交 |
| git rm | 删除文件 |
| git show | 显示各种类型的对象 |
| git stage* | 同义词,等同于 git add |
| git stash | 保存和恢复进度 |
| git status | 显示工作区文件状态 |
| git tag | 里程碑管理 |
9.1 对象库操作相关命令
| 命令 | 简要说明 |
|---|---|
| git commit-tree | 从树对象创建提交 |
| git hash-object | 从标准输入或文件计算哈希值或创建对象 |
| git ls-files | 显示工作区和暂存区文件 |
| git ls-tree | 显示树对象包含的文件 |
| git mktag | 读取标准输入创建一个里程碑对象 |
| git mktree | 读取标准输入创建一个树对象 |
| git read-tree | 读取树对象到暂存区 |
| git update-index | 工作区内容注册到暂存区及暂存区管理 |
| git unpack-file | 创建临时文件包含指定 blob 的内容 |
| git write-tree | 从暂存区创建一个树对象 |
9.2 数据传输相关命令
| 命令 | 简要说明 |
|---|---|
| git fetch-pack | 执行 git fetch 或 git pull 命令时在本地执行此命令,用于从其他版本库获取缺失的对象 |
| git receive-pack | 执行 git push 命令时在远程执行的命令,用于接受推送的数据 |
| git send-pack | 执行 git push 命令时在本地执行的命令,用于向其他版本库推送数据 |
| git upload-archive | 执行 git archive –remote 命令基于远程版本库创建归档时,远程版本库执行此命令传送归档 |
| git upload-pack | 执行 git fetch 或 git pull 命令时在远程执行此命令,将对象打包、上传 |
9.3 分支相关命令
9.3.1 git branch 分支管理
git branch 查看本地所有分支
git branch -a 查看所有的分支
git branch -r 查看远程所有分支
9.3.2 git checkout 切换或新建分支
git checkout --track origin/dev 切换到远程dev分支
git checkout dev 切换到本地dev分支
git checkout -b dev 建立一个新的本地分支dev
9.3.3 git merge 分支合并
git merge origin/dev 将分支dev与当前分支进行合并
相关文章:
git的简单介绍和使用
git学习 1. 概念git和svn的区别和优势1.1 区别1.2 git优势 2. git的三个状态和三个阶段2.1 三个状态:2.2 三个阶段: 3. 常用的git命令3.1 下面是最常用的命令3.2 git命令操作流程图如下: 4. 分支内容学习4.1 项目远程仓库4.2 项目本地仓库4.3…...
UNet Model
论文地址 第一阶段 conv2d(33) first conv:5725721 → 57057064 second conv:57057064 → 56856864 代码 # first 33 convolutional layer self.first nn.Conv2d(in_channels, out_channels, kernel_size3, padding1) self.act1 nn.ReLU() # Seco…...
vue+iviewUi+oss直传阿里云上传文件
前端实现文件上传到oss(阿里云)适用于vue、react、uni-app,获取视频第一帧图片 用户获取oss配置信息将文件上传到阿里云,保证了安全性和减轻服务器负担。一般文件资源很多直接上传到服务器会加重服务器负担此时可以选择上传到oss&…...
算法leetcode|68. 文本左右对齐(rust重拳出击)
文章目录 68. 文本左右对齐:样例 1:样例 2:样例 3:提示: 分析:题解:rust:go:c:python:java: 68. 文本左右对齐: 给定一个…...
基于MATLAB实现小波算法仿真(附上多个完整源码+数据集)
小波变换是一种常用的信号处理技术,广泛应用于图像处理、音频处理、压缩等领域。本文将介绍MATLAB中小波变换的基本原理和实现方法,并给出一个示例来说明如何使用MATLAB进行小波变换和逆变换。 文章目录 1. 引言2. 小波变换的基本原理3. MATLAB中的小波变…...
【深度学习注意力机制系列】—— CBAM注意力机制(附pytorch实现)
CBAM(Convolutional Block Attention Module)是一种用于增强卷积神经网络(CNN)性能的注意力机制模块。它由Sanghyun Woo等人在2018年的论文[1807.06521] CBAM: Convolutional Block Attention Module (arxiv.org)中提出。CBAM的主…...
【资料分享】全志科技T507-H工业核心板规格书
1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板,主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…...
Profibus-DP转modbus RTU网关modbus rtu和tcp的区别
捷米JM-DPM-RTU网关在Profibus总线侧实现主站功能,在Modbus串口侧实现从站功能。可将ProfibusDP协议的设备(如:EH流量计、倍福编码器等)接入到Modbus网络中;通过增加DP/PA耦合器,也可将Profibus PA从站接入…...
AlmaLinux 9 安装 Edge 和 Chrome
AlmaLinux 9 安装 Edge 和 Chrome 1. 安装 Edge2. 安装 Chrome 1. 安装 Edge 更新源, sudo dnf update -y # sudo dnf install dnf-utils -y添加 Edge 源, sudo dnf config-manager --add-repo https://packages.microsoft.com/yumrepos/edge再次更新…...
NGINX——负载均衡
负载均衡————>通过反向代理来实现 nginx反向代理的七层代理和四层代理 七层代理: 七层代理时最常用的反向代理方式,其只能配置在nginx的配置文件的http模块中,而且方法名称必须要定义成“upstream”模块,注意不能写在se…...
C#实现端口扫描和执行cmd命令、调用摄像头
C#端口扫描 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Threading;namespace PortScanner {class Program{static void Main(string[] args){// 设置扫描参数string host "localho…...
【图像恢复】基于交替乘子方法(ADMM)图像恢复算法研究[固定点收敛和应用](Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Qt 使用QLabel的派生类实现QLabel的双击响应
1 介绍 在QLabel中没有双击等事件响应,需要构建其派生类,自定义信号(signals)、重载事件函数(event),最后在Qwidget中使用connect链接即可,进而实现响应功能。 对于其余没有需求事件响应的QObject同样适用。 此外,该功…...
关于@JSONField的使用
1.此注解来自jar包com.alibaba.fastjson 今天分享一个有意思的事情。这个注解作用与类的属性上,如下: ApiModelProperty(value"开始时间,格式:yyyy-MM-dd",required true) JSONField(name"start_date",ordinal 1) private String…...
Centos7单机部署ElasticSearch
Centos7单机部署ElasticSearch 引言 Elasticsearch是一种广泛使用的开源搜索引擎,专门为分布式环境设计,但也可以在单机上运行。它使存储、搜索和分析大量数据变得更加容易和高效。此教程将引导你通过在Centos7上单机部署Elasticsearch,涵盖…...
js玩儿爬虫
前言 提到爬虫可能大多都会想到python,其实爬虫的实现并不限制任何语言。 下面我们就使用js来实现,后端为express,前端为vue3。 实现功能 话不多说,先看结果: 这是项目链接:https://gitee.com/xi1213/w…...
新利好带动 POSE 持续上扬,月内几近翻倍
PoseiSwap 是 Nautilus Chain 上的首个 DEX,得益于 Nautilus Chain 的模块化 Layer3 构架,PoseiSwap 正在基于 zk-Rollup 方案构建全新的应用层,并基于此构建隐私、合规等全新的特性,为未来其布局 RWA 领域推动 Web2、Web3 世界的…...
Windows terminal 添加 git bash 解决git中文乱码显示问题
Windows terminal 添加 git bash 解决git中文乱码显示问题 在 windows terminal 中配置git 说明: 点击箭头选择设置 说明: 点击"添加新配置文件"配置名称命令行,可执行文件的具体语句 C:\Program Files\Git\bin\bash.exe启动目录…...
C语言实现选择排序
什么是选择排序? 选择排序是一种简单直观的排序算法,它的核心思想是每次从未排序的元素中选择最小(或最大)的元素,然后将其放到已排序序列的末尾。通过重复这个过程,直到所有元素都排好序为止。 选择排序…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
