00-Git 详解

news2025/4/23 11:37:51

Git 应用

一、Git概述

1.1 什么是Git

git 是一个代码协同管理工具,也称之为代码版本控制工具,代码版本控制或管理的工具用的最多的: svn、 git。

  • SVN 是采用的 同步机制,即本地的代码版本和服务器的版本保持一致(提交版本时,直接提交到服务器);

  • Git 是采用 异步机制(分为本地仓库和远程仓库),本地提交的版本不会影响服务器的版本,只有本地的代码上传到服务器时才会同步。

git 是一个开源分布式版本控制系统,可用于高效的管理不同大小的项目, 05 年创造的,由林纳斯(Linux 之父)发明的。

1.2 git多人协同开发

代码版本管理工具主要的功能是 多人协同开发,其 作用 是:

  • 防止代码丢失,可以做备份;
  • 代码版本的管理,可以进行多个版本之间的跳跃;
  • 可以方便的将代码在多人之间进行共享传输;
  • 多人开发时,有各种模式(分支、标签)可以方便代码管理。

1.3 git 的特点

  • git 可以管理各种文件,特别是代码项目,多在 linux 和 unix 系统中使用
  • 是分布式管理,不同于集中式,这是 git 和 svn 的核心区别
  • git 可以很好的支持分支,方便多人协作工作 git 分布式代码分家安全,有全球唯一的 commit 版本号
  • git 是开源的系统
  • 使用 git 可以脱网工作(本地仓库),且数据传输速度较快

二、Git的安装与应用

2.1 Windows下Git的安装

下载地址:https://git-scm.com/downloads

一路next

2.2 Linux下安装

在Ubuntu系统下,基于apt安装

命令:

sudo apt-get install git -y

2.3 Git配置

三种配置级别

  • (1) 系统中所有的用户 都可以使用该配置,配置文件是: /etc/gitconfig

    git config --system  配置信息
    
  • (2) 当前用户可使用该配置:配置文件是: ~/.gitconfig

    git config --global 配置信息
    
  • (3) 当前项目可使用该配置,配置文件是:当前项目下的 ./.git/config

    git config
    
2.3.1 配置全局的用户名

给定git用户的名称(自定义)

git config --global user.name "zhb-git"
2.3.2 配置全局的用户邮箱

同配置用户名相同,自定义git用户的邮箱

git config --global user.email "1174333100@qq.com"

在这里插入图片描述

2.3.3 查看配置信息

配置信息后,可以查看配置信息,确认是都OK。

git config --list
#或
git config -l

在这里插入图片描述

2.4 Git常用指令

2.4.1 初始化本地仓库

在某个目录下,将当前目录作为本地仓库使用时。需要将此目录进行初始化:

git init

初始化命令执行成功后,会在当前目录下创建 .git 子目录。

在这里插入图片描述

2.4.2 添加文件到暂存区

将当前目录下的文件添加到暂存区中,

  • 如果文件没有添加到暂存区时,显示的状态是红色的,
  • 添加到暂存区之后,显示状态的颜色应该是绿色的。

查看文件的状态:

git status

在这里插入图片描述

添加文件到暂存区:

git add <文件或> ... | . | *
  • . 表示当前工作目录
  • <文件> 表示具体的某一个文件全名(带后缀名)
  • * 表示任意多个任意字符的文件,代表所有的文件及目录(目录中国的子文件及子目录)

注意:添加到暂存区的文件没有存放在本地仓库中

在这里插入图片描述

可以将暂存区的文件删除:

git rm --cache <文件名>  #删除暂存区的指定文件

#或
git rm --cache -r .  #递归删除所有文件(将暂存区的所有文件恢复到工作区)

注意:git rm --cache -r . 命令可能会将仓库中的文件删除,如果出现这种情况,可以使用下面命令恢复:

git restore --staged <file>...

git restore --staged <file>... 命令可以将暂存区文件还原

2.4.3 提交版本

将暂存区的文件,提交到本地仓库中,产生一个新的提交版本号(世界上唯一的)

git commit -m <提交说明>  #将文件同步到本地仓库并且设置提示说明

注意:

  • 一般提示时需要附加一些同步信息,在-m 后添加
  • 所有对工作区的修改,如果想同步到仓库,都需要执行当前命令(add --> commit)

在这里插入图片描述

2.4.4 查看提交的版本信息

提交的版本 可以通过命令查看:

git log

在这里插入图片描述

可以限制显示版本号的数量:

git log -n 版本数量(具体的值: 1,2,3 等)

在这里插入图片描述

如果只想显示版本号和消息,可以单行显示:

git log --pretty=oneline

在这里插入图片描述

2.4.5 比较本地与仓库中的文件

在将文件提交到本地仓库之后,再次修改文件时,可以比较本地文件与仓库中的文件内容

比较:

git diff <file>

在这里插入图片描述

2.4.6 恢复操作
(1)、从本地仓库中恢复文件
git checkout <文件名>

aaa.txt 中的内容恢复到未修改之前的:

在这里插入图片描述

(2)、丢弃本地文件修改的内容
git checkout -- <文件名>  #丢弃本地指定文件中的已经修改的内容( --两边都有空格)效果同上

在这里插入图片描述

(3)、本地仓库文件的移动和删除

无论移动还是删除,都会影响本地文件,修改后,必须再次提交版本 (再次执行 git commit)

git mv <源文件> <目的目录> #在本地仓库中将源文件移动目的目录中(本地也会移动)

在这里插入图片描述

删除:

git rm <文件名>    # 在本地仓库中删除指定的文件(本地也会删除)
(4)、回到上一个版本
git reset --hard HEAD^   # HEAD 后面的^数量决定了回到上几个版本

在这里插入图片描述

(5)、回到指定的版本
git reset --hard <commit_id>   #只需要 commit id 的唯一的前几位(至少4位)即可

在这里插入图片描述

(6)、查看所有的历史版本
git reflog 	#最新的操作始终在最上边  

在这里插入图片描述

2.4.7 标签管理 (版本管理)

标签是在当前工作的位置添加的快照,用于保存工作状态,一般用于版本的迭代。

(1)、创建标签

在当前提交的版本上创建标签,如:

git tag 标签名 [-m "标签的消息"]

在这里插入图片描述

如果为指定提交版本号创建标签也可以的,如:

git tag <标签名称> <commit id>  #指定某一个 commit id 处创建标签

在这里插入图片描述

(2)、查看标签
git tag
#或
git show <标签名称>

注意:如果出现了 : ,则需要按 q 退出。也可以在show命令上加参数 -q 。

在这里插入图片描述

(3)、删除标签

可以将标签(从版本号上)删除

git tag -d <标签名称>

在这里插入图片描述

(4)、恢复到指定标签

标签和版本号绑定的,在恢复代码版本时,可以使用标签

git reset --hard <标签名称>

在这里插入图片描述

在这里插入图片描述

2.4.8 临时工作区管理

临时工作区可以理解为某个区间,如:暂存区、当前工作区等。

(1)、创建临时工作区

目的:保存未提交文件的状态

  • 红色【新文件、修改文件】未添加到暂存区的文件
  • 绿色【已添加到暂存区的文件】
git stash 

在这里插入图片描述

(2)、查看临时工作区
git stash list

在这里插入图片描述

注意:最近创建的临时工作区在列表的最上面,即 0号位置为最新创建的临时工作区。

在这里插入图片描述

(3)、使用指定工作区
git stash apply stash@{编号}

在这里插入图片描述

注意:在使用临时工作区时,当前工作区不能存在未提交的文件(暂存区必须是空的)

在这里插入图片描述

(4)、使用最新的临时工作区并删除(弹出)
git stash pop

在这里插入图片描述

(5)、删除指定的临时工作区
git stash drop stash@{编号}

在这里插入图片描述

(6)、删除所有的临时工作区
git stash clear  
2.4.9 分支操作

分支主要用于多人协作工作,分支即获取原有代码,在此基础上创建自己的工作环境,单独开发,不会影响其他分支的操作,开发完成后再统一合并到主线分支中

创建分支的好处:安全,不影响其他人工作

(1)、分支的分类

按工程的项目进行代码分支的管理:以项目为准,存在master、develop

project(项目库)
	master(主线分支)
		hotfix(线上紧急 bug 修复分支)
	develop(开发分支)
        feature(功能分支)
        release(发布分支)
        	bugfix(bug 修复分支)  

在这里插入图片描述

(2)、查看当前分支
git branch
(3)、创建分支
I. 只创建分支
git branch <分支名称>

在这里插入图片描述

II. 创建并切换分支
git checkout -b <分支名称>

在这里插入图片描述

(4)、切换分支
git checkout <分支名称>

在这里插入图片描述

(5)、合并分支到当前分支

如果在当前分支下创建的新的分支存在新的提交的版本,则需要切换到当前分支下,可以将心的分支合并到当前分支。即父分支可以合并子分支。

如:

git merge <后代分支名称>
  • 合并过程中如果没有冲突,直接合并后当前分支即为干净的状态,直接保存在本地仓库中
  • 如果产生冲突,需要人为的选择,然后在进行 add 和 commit 的操作
  • 在创建分支前,尽量保证当前分支是干净的,以减少冲突的发生

在这里插入图片描述

在这里插入图片描述

feature2 是develop分支的子分支, 子分支已提交了两个版本。

如果将feature2分支合并到develop分支上,则 需要先切换再合并。

在这里插入图片描述

(6)、删除分支
git branch -d < 分支名称>

在这里插入图片描述

(7)、衍合分支
git rebase <分支名>

效果同合并分支,但是不会创建新的版本号,只会更新父分支上最近提交的版本号(是在子分支创建之后提交的)

在这里插入图片描述

三、远程仓库

3.1 Gitee的远程仓库

远程仓库:中心服务器上的git仓库

  • gitee:目前使用较多的是gitee(国内免费)
  • github:国外免费,网速比较慢
  • gitlab:私有仓库,企业内部搭建

gitee的网址:https://gitee.com/

需要注册账号,并登录。

3.2 配置gitee的ssh秘钥

  • gitee 支持http和ssh两个协议,http协议每次使用时,都需要手动输入用户名和口令,比较麻烦。

  • 可以使用ssh协议,ssh协议支持公钥与私钥实现免密。

  • 在gitbash的窗口中,生成公钥与私钥

  • 命令如下

ssh-keygen

在这里插入图片描述

产看公钥:

cat ~/.ssh/id_rsa.pub

将此公钥粘贴在 gitee网页 —> 头像 下来菜单 选择 账号设置 菜单,在 设置页面,从 左边菜单 找到 SSH公钥 ,点击之后,打开公钥设置界面,填写公钥名称和内容:

在这里插入图片描述

确认信息之后,点击【确定】

3.3 创建仓库

点击用户头像左边的 + 图标,在弹出的子菜单中选择 新建仓库 ,在打开页面,输入仓库的名称及介绍即可点击【创建】按钮。

在这里插入图片描述

在这里插入图片描述

3.4 本地仓库上传

3.4.1 首次上传
  • 先将远程仓库的位置(ssh仓库位置)添加到本地仓库的配置中,

  • 然后再上传,上 传时必须带 -u <远程仓库的名称> <分支名称>

git remote add origin git@gitee.com:disenQF/testgit2302.git
git push -u origin "master"

origin 是远程仓库的名称,可以自定义;

master 是远程仓库的分支名(默认的主分支名)。

3.4.2 再次上传
git push
3.4.3 强制上传

远程仓库的代码完全由本地仓库的代码替换

git push -u --force origin master

3.5 远程仓库下载

3.5.1 首次下载

通过 克隆 的方式下载的远程仓库

git clone git@gitee.com:用户名/仓库名
3.5.2 再次下载(更新)
git pull

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

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

相关文章

3D视觉-结构光测量-网格结构光测量

网格结构光测量 网格结构光测量也常常被称为面结构光测量&#xff0c;它首先需要用投影器件产生符合条件的网格状投射光&#xff0c;并投射到待测物表面&#xff0c;由于网格上的光条具有两个方向&#xff0c;因此该方法可以通过两个测量方向分析待测物表面的三维坐标信息&…

键盘字符(#键)显示错误

当屏幕上显示的键与键盘上按下的键不同时&#xff0c;尤其是 # 键。大多数情况下&#xff0c;此错误是由于 raspbian 和 NOOBS 软件的默认英国键盘配置所致。 解决方案&#xff1a; 要解决此问题&#xff0c;您需要将配置更改为您自己的键盘或语言的配置。这可以通过转到树莓派…

Docker单点部署Seata(2.0.0) + Nacos(v2.3.0) + Mysql(5.7)

文章目录 一、部署Nacos二、部署Mysql三、Seata准备工作1. 记住nacos、mysql、宿主机的ip2. 建立数据库3. Nacos远程配置文件 四、部署Seata五、初步检验Seata部署情况六、微服务使用Seata1.引入依赖2. application.yml配置 七、遇到的坑1. Nacos显示Seata服务的ip为容器内网ip…

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…

[MySQL] MySQL数据库创建存储过程

一、mysql存储过程的相关知识 1.1 存储过程的概念 存储过程是一组为了完成特定功能的SQL语句集合。类似于于其他编程语言中的函数&#xff0c;定义一个函数方法&#xff0c;可以随时起到传参调用的功能。 存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用…

c++ / day01

1. 整理思维导图 2. 定义自己的命名空间myspace&#xff0c;并在myspace中定义一个字符串&#xff0c;实现求字符串大小的函数。 代码 #include <iostream>using namespace std;namespace myns {unsigned long long strlen(string s){return s.length();}}int main() {…

Linux文件fd剖析

学习之前&#xff0c;首先要认识什么是文件&#xff1f; 空文件也是要在内存中占据空间的&#xff0c;因为它还有属性数据。文件 属性 内容文件操作 对内容 对属性 或者对内容和属性的操作标定一个文件的时候&#xff0c;必须使用&#xff1a;路径文件名&#xff0c;文件具…

操作系统:linux(在虚拟机上详细步骤安装)Centos

文章目录 前言&#xff1a;一、如何在自己的电脑上安装centos?二、在虚拟机上安装centos2.1安装步骤&#xff1a; 前言&#xff1a; 操作系统有&#xff1a;windows server 不开源的收费的、linux 开源的免费的&#xff0c;精简安装&#xff08;没有UI)。国产的操作系统有&am…

<JavaEE> TCP 的通信机制(一) -- 确认应答 和 超时重传

目录 TCP的通信机制的核心特性 一、确认应答 1&#xff09;什么是确认应答&#xff1f; 2&#xff09;如何“确认”&#xff1f; 3&#xff09;如何“应答”&#xff1f; 二、超时重传 1&#xff09;丢包的概念 2&#xff09;什么是超时重传&#xff1f; 3&#xff09…

ORACLE P6 v23.12 最新虚拟机(VM)全套系统环境分享

引言 根据上周的计划&#xff0c;我简单制作了两套基于ORACLE Primavera P6 最新发布的23.12版本预构建了虚拟机环境&#xff0c;里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机&#xff0c;请先与Oracle Primavera销售代…

C#中使用as关键字将对象转换为指定类型

目录 一、定义 二、示例 三、生成 使用as关键字可以将对象转换为指定类型&#xff0c;与is关键字不同&#xff0c;is关键字用于检查对象是否与给定类型兼容&#xff0c;如果兼容则返回true&#xff0c;如果不兼容则返回false。而as关键字会直接进行类型转换&#xff0c;如果…

算法逆袭之路(1)

11.29 开始跟进算法题进度! 每天刷4题左右 ,一周之内一定要是统一类型 而且一定稍作总结, 了解他们的内在思路究竟是怎样的!! 12.24 一定要每天早中晚都要复习一下 早中午每段一两道, 而且一定要是同一个类型, 不然刷起来都没有意义 12.26/27&#xff1a; 斐波那契数 爬…

探秘交互设计:深入了解五大核心维度!

交互式设计是用户体验&#xff08;UX&#xff09;设计的重要组成部分。本文将解释什么是交互设计&#xff0c;并分享一些有用的交互设计模型&#xff0c;并简要描述交互设计师通常做什么。 如何解释交互设计 交互式设计可以用一个简单的术语来理解&#xff1a;它是用户和产品…

Kubernetes集群部署Rook Ceph实现文件存储,对象存储,块存储

Kubernetes集群部署Rook Ceph部署Ceph集群 1. Rook Ceph介绍 Rook Ceph是Rook项目中的一个存储方案&#xff0c;专门针对Ceph存储系统进行了优化和封装。Ceph是一个高度可扩展的分布式存储系统&#xff0c;提供了对象存储、块存储和文件系统的功能&#xff0c;广泛应用于提供…

【Kubernetes】什么是 kubectl ?

什么是 kubectl &#xff1f; 1.什么是 kubectl &#xff1f;2.Kubernetes 内部结构3.Kubernetes API 的作用 1.什么是 kubectl &#xff1f; 在学习如何更有效地使用 kubectl 之前&#xff0c;您应该对它是什么以及它如何工作有一个基本的了解。从用户的角度来看&#xff0c;…

Vue小练习--任务列表

这是一个非常实用的例子&#xff0c;主要实用的是v-model、v-on、v-for指令&#xff0c;javaScript的数组也会涉及一些&#xff0c;javaScript数组方法有很多&#xff0c;本文使用的添加元素和删除元素非常实用&#xff0c;可以记下来。 设计思路 很多例子看起来很难&#xf…

SpringMVC源码解析——DispatcherServlet的逻辑处理

DispatcherServlet类相关的结构图如下&#xff1a; 其中jakarta.servlet.http.HttpServlet的父类是jakarta.servlet.GenericServlet&#xff0c;实现接口jakarta.servlet.Servlet。我们先看一下jakarta.servlet.Servlet接口的源码如下&#xff1a; /*** 定义所有servlet必须实…

Java EE Servlet之服务器版表白墙

文章目录 1. 准备工作2. 约定前后端交互接口3. 编写提交消息4. 数据存入文件5. 引入数据库 1. 准备工作 我们要把表白墙程序修改成服务器版本 这样即使页面关闭, 表白墙的内容也不会丢失 此处&#xff0c;服务器要实现的功能&#xff0c;主要是两个方面&#xff1a; 页面加载…

CSS 动态提示框

​​ <template> <div class"terminal-loader"><div class"terminal-header"><div class"terminal-title">提示框</div><div class"terminal-controls"><div class"control close"…

Qt 5.9.4 转 Qt 6.6.1 遇到的问题总结(一)

最近公司对大家的开发的硬件环境进行了升级&#xff0c;电脑主机的配置、显示器&#xff08;两台大屏显示器&#xff09;变得的逼格高多了。既然电脑上的开发环境都需要重装&#xff0c;就打算把开发环境也升级到最新版本&#xff0c;要用就用最新版本。下面对升级后的开发环境…