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语言实现选择排序
什么是选择排序? 选择排序是一种简单直观的排序算法,它的核心思想是每次从未排序的元素中选择最小(或最大)的元素,然后将其放到已排序序列的末尾。通过重复这个过程,直到所有元素都排好序为止。 选择排序…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
