Git - 版本控制系统

news2024/11/19 13:20:22

一、概述

        git是一个免费开源,分布式的代码版本控制系统,帮助开发团队维护代码。作用是记录代码内容,切换代码版本,多人开发时高效合并代码内容。

直接安装git,默认下一步,然后就能在VScode中看到git控制台

配置用户信息

配置:用户名和邮箱,应用在每次提交代码版本时表明自己的身份。

命令:

        git config --global user.name "在这里设置名字"

        git config --global user.email "在这里设置邮箱"

设置完毕后使用命令 git config --list 查看配置是否生效


二、Git仓库

Git仓库:记录文件状态内容的地方,存储着修改的历史记录

创建

1、把本地文件夹转换成Git仓库:命令git init

2、从其他服务器上克隆git仓库

本地仓库

打开一个程序,执行命令git init,这会生成一个.git文件夹,这是用来保存文件的

创建好的.git文件夹是隐藏目录,不打开隐藏可见的话是看不到的

git的三个区域

工作区:实际开发时操作的文件夹

暂存区:保存之前的准备区域(暂存改动过的文件)

版本库:提交并保存暂存区的内容,产生一个版本快照

命令作用
git add 文件名暂存指定文件
git add .暂存所有改动的文件(推荐)
git commit -m "注释说明"提交并保存,产生版本快照

示例 

现在我们有一个程序,我们尝试将它上传至git管理

git ls-files 这个指令可以查看是否成功存入暂存区,之后再提交

这样即代表提交成功

注意:

        出现这种警告是因为文件中有多余的空白字符。由于编辑器的不同或者文件行尾的换行符在 Windows 下被替换了,一些细微的空格变化会不经意地混入提交,造成麻烦。虽然这是小问题,但它会极大地扰乱跨平台协作。

具体可以查看这篇博客icon-default.png?t=N7T8https://blog.csdn.net/u012757419/article/details/105614028


Git文件状态

git文件有两种状态

        未跟踪:新文件、从未被Git管理过(U)

        已跟踪:Git已经知到和管理的文件(A)

版本查看指令:git status -s

        这与git的基本使用相关,先总结一下上面的内容,我们书写一个程序,此时它的状态为未修改(’‘)。我们使用git add指令后,git会将它放入暂存区中,程序变为已修改状态(M),直到我们使用git commit命令,git才会将我们所写的程序以版本的形式存入版本库,未来我们可以通过这个回退版本。注意提交并不会清空暂存区,且会让项目文件重置为未修改状态

        因此git的基本使用就是: 修改文件,暂存,提交保存记录,如此反复

举例

更改文件,文件的后面就会有 M 标记,这代表此时它被修改了

或者此时可以输入指令  git status -s ,确实处于 M 已修改状态

提交会清空状态


三、区域使用

暂存区使用

暂存区作用:可以恢复代码内容,与版本库解耦。

git restore [ 目标文件 ]:使用这个命令 ,即可让暂存区的目标文件覆盖工作区的目标文件(确认真的要覆盖的时候再使用)

git rm --cached [ 目标文件 ]:从暂存区中移除文件

版本库使用

版本回退:将版本库的某个版本对应的内容快照,恢复到工作区/暂存区

查看提交历史:git log --oneline

、 

回退指令:

git reset --soft [ 版本号 ]:新添加的文件,也就是未被跟踪的文件会被保留

git reset --hard [ 版本号 ]:新添加的文件,也就是未被跟踪的文件会被删除,完完全全的恢复到保存的版本

git reset --mixed [ 版本号 ]:工作区中未被跟踪的文件会被保留,而暂存区中的会被删除,这个与直接输入git reset的效果一样

文件忽略

.gitignore文件可以让git彻底忽略跟踪指定文件。

目的:让git仓库更小更快,避免重复的无意义文件管理

例如:

  1. 系统或软件自动生成的文件
  2. 编译时产生的结果文件
  3. 运行时生成的日志文件、缓存文件、临时文件等
  4. 涉密文件,密码,密钥等

前端文件中,一般都忽略这些文件。


四、分支

概念:本质上是指向提交节点的可变指针,默认名字是master

简单来说,就是一个容器,可以保存某个提交的节点记录。

使用场景:

        开发新需求/修复bug,保证主线代码随时使用,多人协同开发提高效率。

比如:在现有的代码上创建新的分支完成内容列表业务,突然需要紧急修复bug -> 单独创建分支解决bug

步骤

  1. 创建分支:git branch [ 分支名 ]
  2. 切换分支:git checkout [ 分支名 ]
  3. 工作区准备代码并暂存提交

这里面我创建了一个分支content,当我们切换回master时,我们所写的content的代码都不见了,但是我们切换回来的时候就出现了。

合并与删除

将写好的分支合并回到master分支上,并删除分支

指令:git merge [ 分支 ]

步骤

  1. 切回到要合入的分支上:git check master
  2. 合并其他分支:gir merge [分支]
  3. 删除合并后的分支指针:git branch -d [分支]

查看版本列表,成功合并

删除分支

合并与提交

如果有多条分支,且在合并的时候发现已经被别的分支合并过了,那么就会自动生车成一个新的分支,这个分支下会拥有所有的代码

使用指令git merge content

注意:这个指令这会比较不同分支的提交时间,因此以时间为顺序合并到分支上

使用指令检验一下分支

发现content指向8而不是10

合并冲突

 

这个错误只能手动解决,让两个不同的文件相同,否则无法合并

因此为了避免


五、常用指令

总结一下 上面涉及的指令

命令作用注意
git -v查看git版本
git init初始化git仓库
git add [ 文件标识 ]暂存某个文件这个文件路径要以终端为起始的相对路径
git add .暂存所有文件
git commit -m " 说明注释 "提交版本记录提交的是暂存区的内容
git status查看文件状态 -详细信息
git status -s查看文件状态 -简略信息第一列是暂存区状态,第二列是工作区状态
git ls -files查看暂存区文件列表
git restore 文件标识从暂存区恢复到工作区若文件标识为 . 那么就是恢复全部文件 
git rm --cached 文件标识从暂存区移除文件
git log查看提交记录 -详细信息
git log --oneline查看提交记录 -简略信息版本号 分支指针 提交时说明注释
git reflog --oneline查看完整历史包括提交,切换,回退等记录
git reset 版本号切换版本代码到暂存区和工作区--hard 不保留任何文件
git branch 分支名创建分支
git merge 分支名合并分支
git branch -d 分支名删除分支
git branch查看本地分支
git checkout 分支名切换分支
git checkout -b 分支名创建并立刻切换分支


六、Git远程仓库

概念:托管在因特网或其他网络中的项目的版本库

作用:保存版本库的历史记录,多人协作

创建:公司自己的服务器 / 第三方托管平台(Gitee,GitLab,GitHub...)

使用步骤 

我们在这里使用第三方托管平台Gitee

1、注册账号

2、新建仓库得到远程仓库Git地址

3、本地Git仓库添加远程仓库原点地址

        命令:git remote add 远程仓库名 本地和远程分支名

4、本地Git仓库推送版本记录到远程仓库

        命令:git push -u 远程仓库名 本地和远程分支名

        例如:git push -u origin master

在gitee中创建一个仓库,其中有两种地址

连接一下地址,会发现有两个地址

如果想要取消连接,那么就使用指令

git remote remove origin   移除仓库

提交版本至远程仓库,使用指令git remote push -u origin master,如果是第一次使用gitee,那么就会出现登录界面,登录就行了

如果你的项目中有README.md文件,那么在gitee网页上就会展示出来作为这个项目的介绍和使用说明 

克隆

拷贝一个Git仓库到本地,进行使用

要克隆首先要准备一个空文件夹

 

然后使用Git的窗口

 

 

同步

多人协同开发:想要看到别人同步上去的最新内容:git pull origin master

通过这个,当别人的项目更新了就不需要重新克隆一个了,直接pull过来就行了


七、图形化界面上使用Git

VScode上使用git

vscode左边会有这么一个工具,叫做源代码管理

其中会显示有更改的文件

只要点击就会对比两个文件的修改位置,左边是更改前,右边是更改后 。点击加号 + 就会保存修改将其保存在暂存区

点击提交就会提交到本地仓库中

点击同步更改就会将本地仓库中的记录推送到远程仓库中

可以看到是拉去并推送提交

就是说底层是先pull了一下再push的,这是因为再多人协作的时候,如果两个人同时修改了同一个文件,但是彼此又不知道。那么先push的人就可以修改成功,后push的人就会发生合并冲突,如果强制push,远端仓库会自动合并,保留出现冲突的内容(上一个版本和刚提交的内容都会被保留下来)。这时代码将不能正常运行,其他同事在执行 pull 拉取新代码后会发现无法运行,这就给别人造成了很大的麻烦。所以即使是自己使用命令行操作git,也要养成push前先pull一下的习惯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1233243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8更换骨干网络HorNet:递归门控卷积的高效高阶空间交互——涨点神器!

🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结   -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …

海康威视监控相机的SDK与opencv调用(非工业相机)

1.研究内容 本篇主要对海康威视的监控相机的SDK回调进行研究,并于opencv结合,保存图像,以供后续其他处理,开发语言为C 2.步骤及方法 2.1 海康SDK介绍 海康SDK下载地址 根据自身编译环境,下载对应的SDK,需要注意的是…

rotation matrix reflection matrix

文章目录 1. rotation matrix1.1 结论 2. reflection matrix2.1 结论 1. rotation matrix 图像逆时针旋转 θ \theta θ的矩阵 Q r o t a t e [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] (1) Q_{rotate}\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\c…

LOJ #10134. 「一本通 4.4 练习 1」Dis

分析 根据数据范围分析一下复杂度,Floyd和dj算法都必爆。 发现题目说的是树,还是边还是双向的(树本身就是无向的,连通无回路的无向图叫做无向树,简称树。如果题目说了树,那么默认边就是双向的&#xff09…

腾讯云服务器标准型S5实例CPU性能如何?配置特性说明

腾讯云服务器CVM标准型S5实例具有稳定的计算性能,CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽,15个月313.2元、2核4G配置748.2元15个月,CPU内存配置还可以选择4核8G、8核16G等配置,公网带宽可选1M、3M、5M或10M,腾…

uniapp和vue3+ts创建自定义下拉选择框组件

使用uniapp开发小程序的时候,使用了uview的ui组件,但是里面没有下拉选择组件,只有Picker 选择器,但是我们想要使用下拉选择的组件,所以需要自定义个一个下拉选择的自定义组件,我就只能自己动手创建这个自定…

公网环境固定域名异地远程访问内网BUG管理系统

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

【OpenGauss源码学习 —— 列存储(ColumnTableSample)】

执行算子(ColumnTableSample) 概述ColumnTableSample 类ColumnTableSample::ColumnTableSample 构造函数ColumnTableSample::~ColumnTableSample 析构函数ExecCStoreScan 函数ColumnTableSample::scanVecSample 函数ColumnTableSample::getMaxOffset 函数…

前端实现移动端Tab栏(附带源码)

文章目录 先上图,附带源码index.html 主要视图层Main.css 主要样式demo.css主要的JS,在index.html 引入即可先上图,附带源码 提示:一款JS和CSS3炫酷Tabbar导航栏动画特效。该Tabbar导航栏在点击切换时,会有类似波浪运动的动画效果,非常炫酷。 index.html 主要视图层 &l…

Hadoop-- hdfs

1、HDFS中的三个进程:NameNode(NN)、DataNode(DN)、SecondNameNode(SNN) 2、NameNode(NN) 1、作用: 1、接收客户端的一个读、写的服务,在namenode上存储了数据文件和datanode的映射的关系。 …

Python实现WOA智能鲸鱼优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

[C语言 数据结构] 栈

1.什么是栈? 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压…

Java高级编程-----网络编程

网络通信协议 通过计算机网络可以实现多台计算机连接,但是不同计算机的操作系统和硬件体系结构不同,为了提供通信支持,位于同一个网络中的计算机在进行连接和通信时必须要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交…

C++ LibCurl实现Web隐藏目录扫描

LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP、FTP、SMTP、POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发送HTTP请求、下载文件、发送电子邮件等…

Android AIDL中使用Surface问题

1.构建ITest.aidl文件 package com.xxx.xxxx;import android.view.Surface;interface IMonitorService {boolean addSurface(in Surface surface);boolean removeSurface(in Surface surface); } 2.构建时报错 3.Surface源码分析 android.view.Surface中包含两个Surface类&am…

泛型进阶:通配符

基本概念 对泛型不了解的可以看这篇博客&#xff1a;数据结构前瞻-CSDN博客 一般来说&#xff0c;&#xff1f;在泛型里的使用就是通配符 看看下面的代码 class Message<T> {private T message ;public T getMessage() {return message;}public void setMessage(T m…

新生儿斜视:原因、科普和注意事项

引言&#xff1a; 新生儿斜视是一种儿童眼部常见的问题&#xff0c;指的是眼球的定位不正常&#xff0c;造成双眼无法同时注视同一个物体。了解新生儿斜视的原因、科普相关知识&#xff0c;并提供适当的注意事项&#xff0c;对于早期发现和处理这一问题至关重要。本文将深入探…

通过css设置元素隐藏和显示

背景&#xff1a;鼠标悬浮时显示删除&#xff0c;放开后显示组件名 解决&#xff1a;通过display:none和display:block显示和隐藏元素&#xff1b; 使用 div p选择器选择当前div的下一个紧跟的p元素 <div v-if"!preview" class"name">{{propertyDa…

企业办公室信息安全保密办法——推荐用天锐绿盾数据安全防泄密系统 | 防止核心文件数据、资料泄露

天锐绿盾数据安全防泄密系统是一种有效的办公室信息安全保密办法。该系统采用驱动层透明加密技术&#xff0c;对电子文件进行自动加密&#xff0c;保护数据的安全性和隐私性。 PC端访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c…

配置Java环境变量不生效的解决办法

问题&#xff1a; 直接更换Java_HOME的JDK安装路径后&#xff0c;竟然环境变量不生效&#xff0c;在cmd窗口输入java -version或者javac -version后报错&#xff1f;&#xff1f;&#xff1f;这是为什么呢&#xff1f; 问题剖析&#xff1a; 在使用安装版本的JDK程序时&#…