分布式版本控制工具 Git 的使用方式

在这里插入图片描述

在这里插入图片描述

文章目录

  • Git简介
  • 下载安装
  • 基本使用
    • 起始配置
    • Git 的三个区域
    • 基本操作流程
    • 查看仓库状态
    • 删除(撤销暂存区)
    • 差异对比
    • 查看版本日志
    • 版本回退
    • 修改提交日志
    • 分支
      • 概念:
      • 创建分支与切换分支
      • 合并分支(快速合并)
      • 合并分支(提交合并)
      • 删除分支
      • 分支变基
      • tag 【标签】
      • 游离分支
      • GitFlow
    • 远程仓库
      • 关联远程仓库
      • 推送远程
      • 拉取远程分支代码
      • 关于冲突
      • 克隆远程库
      • 本文 Git 命令汇总

Git简介

Git 是一款免费的开源分布式版本控制系统,旨在快速高效地处理从小型到超大型项目的所有项目。它可以追踪文件的更改,并能多人协同开发。Git 是目前最流行的版本控制系统,其主要功能包括:

  • 代码备份
  • 版本控制
  • 多人协作
  • 权限控制

下载安装

下载地址 Git官网下载地址

在这里插入图片描述


基本使用

起始配置

  • 第⼀次使用 Git 的时候,我们需要配置姓名和邮箱,让Git 知道当前开发者的基本信息

    • 配置姓名:
git config --global user.name "User Name"
    • 配置邮箱:
git config --global user.email "email...com"

备注 可以使⽤ git config --listgit config -l 命令来查看配置信息。


Git 的三个区域

  1. ⼯作区(代码编辑区)
  2. 暂存区(暂时存储区)
  3. 版本区(版本控制区)

工作区、暂存区、版本区,三个区共同组成了⼀个 Git 仓库


基本操作流程

  1. 在项目根目录下执行 git init 初始化命令 会生成一个 .git 文件夹,这样就成功的初始化了一个本地仓库,而此时根目录下的文件就处于工作区
git init
  1. 执行命令 git add [file],可以指定将某个指定文件提交到暂存区,同时也可以执行以下三种命令之一,将工作区的所有文件都提交到暂存区
git add -Agit add * git add .
  1. 执行命令 git commit -m '提交的备注'暂存区的所有文件提交到版本控制区,这时候,这个文件就真正的受到了 Git 的版本控制,并生成了一个独一无二的版本记录
git commit -m "提交了a文件"

流程图示:
在这里插入图片描述


查看仓库状态

  • 执行 git status 命令⽤于显示仓库当前的状态git status -s 也⽤于查看仓库状态,但提示更为简短。

初始化仓库后,若还没有项目文件或需要提交的内容,则提示如下:

在这里插入图片描述

如果此时工作区有一个文件,还没有提交暂存区则会提示:
在这里插入图片描述

暂存区已有内容但是还没有提交版本区,提示如下:

在这里插入图片描述


删除(撤销暂存区)

运行以下命令:

git rm --cached <file>  //撤销暂存区指定文件git rm --cached -r .  //撤销暂存区所有文件

差异对比

运行以下命令:

git diff 用于 对比 :工作区 vs 暂存区

git diff --cached用于 对比 :版本区 vs 暂存区


查看版本日志

借助于以下命令可以查看 git 的 整个版本提交记录

  • git log
git log

在这里插入图片描述

  • git log --oneline

  • git log --onelinegit log 的基础上提供更简洁的版本提交记录

git log --oneline

在这里插入图片描述

  • git reflog

  • git reflog 可以提供更加完整的版本提交记录

git reflog

在这里插入图片描述


版本回退

当我们在 git 中提交创建了多个版本记录时,我们就可以在这些多个版本之间任意的切换回到不同的版本时间点。

  • 使用 git reset --hard 命令进行版本之间的切换回滚
git reset --hard [版本号]

值得注意 使用 git reset --hard 切换版本后会有以下操作:

  • 切换版本区 HEAD 指针指向
  • 还原暂存区 到对应版本
  • 还原工作区 到对应版本

所以在执行 git reset --hard 切换版本之前 ,需要通过git addgit commit 清空当前工作区以及暂存区之后再进行版本切换

  • --soft重置 HEAD 到指定提交,所有的更改都会自动添加到暂存区,对工作区无影响
  • --mixed: (默认值):重置HEAD到指定的提交,并且重置暂存区,对工作区无影响
  • --hard重置 HEAD 到指定的提交,并且重置暂存区,重置工作区

修改提交日志

当有时候我们进行了一次 commit 的版本提交,这时候如果想对最近的一次提交日志做出更改可以用以下命令:

命令:git commit --amend

  • 命令可以重新编辑最近一次的版本提交日志
  • 将新的更改合并到最近一次的提交中

如果想将当前的更改,合并到最近上一次的更改记录中,而不是形成一个新的提交记录,只需要先将当前工作区的文件git add 添加到暂存区,再使用 git commit --amend -m "日志" ,添加合并到上一次提交中,这样一来两次提交就共享一次提交记录


分支

概念:

分支是 Git 的一个重要的特征,它可以使开发人员,从主分支上衍生出多个独立的分支,最后可以选择性的将衍生分支决定是否合并到主分支上

创建分支与切换分支

  • 在创建分支之前,我们可以使用命令 git branch 来查看当前仓库下存在哪些分支,初始默认情况下,我们的默认主分支为 mastermain,这时候我们使用 git branch <分支名>,就可以成功创建一个分支了。

在这里插入图片描述

值得注意:

在项目初始化的时候,如果就想立即建立一个衍生分支,则需要保证当前的主分支至少进行了一次 commit 版本提交,否则可能会报错 fatal: not a valid object name: 'master'。遵循着所有的衍生分支都必须处于主分支的版本下继承诞生,如果初始化的时候,主分支都还没 commit 诞生版本,这个时候对于版本区来说主分支都还没有诞生,那么依赖于主分支的衍生分支这时候自然也是无法创建的。

所以:当衍生分支创建后,提交记录并不是空的,依然保留继承着截止创建衍生分支时,主分支当前最新的提交记录。所继承主分支最新提交的这次版本记录,被称为基点

  • 创建分支后,可以使用 git checkout <分支名> 命令来切换当前的分支。

注明:

  • 在切换分支之前,需要将当前分支管理好,最好进行 git addgit commit,清空当前工作区或暂存区。
  • 切换分支后,工作区和暂存区会受到相应的影响。表现为:
    • 工作区:会变成切换到的当前分支最后一次提交状态
    • 暂存区:同上,并且如果当前暂存区有未提交的更改,那么这些更改会被带到新分支的暂存区上

合并分支(快速合并)

  • 如果我们当前版本存在两个分支,master test 分支,且这时候 test 分支领先于 master 分支,同时 test 分支继承了 master 分支的全部版本记录,这时候就可以触发 快速合并

  • 合并分支的时候需要先将分支切换到,想要合并的到的目标分支,然后执行 git merge test 命令将 test 分支的版本内容合并到 master 分支,合并成功后,工作区 也会看到 test 分支的内容了,同时也可以看到合并后的版本提交记录了。


合并分支(提交合并)

如果当要合并的两个分支,出现不一致的版本的时候,则会在拿到当前分支最新版本的提交 和 想要合并分支的最新版本提交,在当前分支形成一个新的版本提交记录,这时候需要手动补充新版本的提交日志描述,合并指令同上。


删除分支

git branch -d  <分支名>  //删除分支
git branch -D  <分支名>  // 强制删除分支

备注说明:

删除分支的时候,我们需要切出要被删除的分支,同时如果,当我们要删除的分支上的文件发生变化后,在删除的时候,可能会发出警告,这时候我们有以下几种处理方式:

  • 第一种方式:将要删除的分支合并到一个其他的分支,再进行删除.
  • 第二种方式:使用 git branch -D xxx 强制删除。
  • 第三种方式:使用 git config advice.forceDeleteBranch false 命令关掉该提示。

分支变基

所谓的 变基 其实就是把当前分支的提交记录与目标分支(主分支)的最新的提交记录做线性合并,也可以理解为把当前分支与主分支分离时的那次提交记录,变化成主分支的最新一次提交记录,这样当前分支就也具备了主分支的所有提交记录加上当前分支的所有提交记录,并作一个线性记录展示。

命令

git rebase <需要变基的目标分支,多用于主分支 master >

tag 【标签】

在 Git 中,标签(Tag)是用来指向特定提交的引用,通常用于标记项目中的重要点,比如版本发布。标签分为两种类型:

  1. 轻量标签(Lightweight)

轻量标签只是简单地指向描述一个提交,不包含其他信息,创建轻量标签不会存储任何额外的信息。

  1. 附注标签(Annotated)

附注标签存储了额外的信息,例如:标签名、标签信息、创建者名字、电子邮件、创建日期等。因为它们包含了更多的信息,附注标签更适用于公共或正式发布的场合,比如软件版本的发布。

创建标签

命令描述
git tag 标签名 版本号给指定提交打 轻量标签
git tag -a 标签名 版本号 -m "标签描述"给指定提交打 附注标签
git tag查看标签
git show 标签名查看标签信息
git tag -d 标签名删除标签

游离分支

git checkout 也可以将代码签出到指定版本,即可以执行 git checkout 具体版本号,当签出到指定提交版本时,签出的代码出于一个临时的游离分支中,如下图操作

在这里插入图片描述

值得注意:重要

在游离分支上也可以对代码进行版本控制,但要特别注意:一旦从游离分支切走,游离分支的提交不会交给任何一个分支,因为它是临时的,所以对于游离分支我们的使用原则是:

  1. 要尽量避免修改游离分支的代码(只是看一看某个版本的代码)
  2. 若确实需要修改游离分支代码,应该从当前游离分支,创建出一个新的分支,随后去修改
  3. 若修在游离分支上发生了提交,随后从游离分支切走了,就要使用 reflog 寻找游离分支的提交

GitFlow

GitFlow 【分支模型】 是团队协作开发的一种最佳实践方式之一,将代码划分为以下几个分支

分支描述对应环境
master主分支,只保存正式发布的代码 生产环境
develop开发分支,开发者的编写的代码最终要汇总在这个分支 开发环境
hotfix线上紧急修复分支,修复完毕后要合并回 master develop 分支,同时在 master 分支上打一个 tag 标签 开发环境
release预发布分支Release 分支基于 Develop 分支创建,在这个 Release分支上测试 测试环境
feature功能分支,当开发某个功能时创建一个单独的分支,开发完毕后再合并到 develop 分支 开发环境

远程仓库

关联远程仓库

第一步:首先维护好本地仓库再进行远程管理(所有文件均接受版本控制)。

第二步:注册并激活 Gitee或 Github 账号。

第三步:创建远程仓库,并获取仓库的地址。

第四步:配置本地仓库关联远程仓库

git remote add origin https://xxxx/xxxx/xxxxx.git

注明:

  • 查看当前仓库关联远程仓库地址:git remote -v
  • 更改远程仓库的 URL:git remote set-url origin 新的仓库URL
  • 删除与远程仓库的关联:git remote remove origin

推送远程

git push -u origin master

备注说明:

  • push 表示推送。
  • -u(upstream) 表示关联,加上 -u 以后,后续提交时可以直接使用 git push 即可。
  • origin 远端仓库的别名。
  • master 要推送到的远程目标分支,建议和当前本地分支同名。

拉取远程分支代码

当本地仓库想获得远程仓库的最新修改时,可以使用git pull命令拉取远端代码。

git pull   

说明:

备注:git pull 会将远端代码自动执行合并操作,即:将远程分支的修改合并到本地当前分支

关于冲突

  • 合并/变基引起的冲突:两个分支在同一文件的同一位置都有修改时,合并或变基时会引起冲突。
  • 拉取引起的冲突:不同的开发者修改了同一文件的同一位置都有修改时,拉取代码会有冲突。克隆远程库

克隆远程库

获取一个远程仓库的地址,随后执行克隆命令

git clone https://xxxx/xxxx/xxxx.git

注意:

默认这样直接克隆下来的是包含整个仓库的所有分支以及各分支段的所有提交记录

  • 克隆下来的仓库,使用 git branch 命令,只能看到默认分支其他分支其实也已经克隆下来了,但不出现在 git branch 列表中,需要使用 git branch -rgir branch -a 来查看。

在这里插入图片描述

  • 需要切换到其他分支时,可以直接 git checkout -b xxx origin/xxx 来进行切换,当然对于 1.7.0 以后的 git 版本,也可以使用简短的命令:git checkout xxx 来切换。

还使用 --depth 1 参数可以克隆仓库的最近一次提交,这样可以减少克隆所需的时间和空间。

git clone --depth 1 https://xxxx/xxxx/xxxx.git

通过 -b <指定分支名> --single-branch 可以获取远程仓库的某一个指定分支

git clone -b <指定分支名> --single-branch https://xxxx/xxxx/xxxx.git

也可以将 -b <指定分支名> --single-branch --depth 1 结合使用克隆指定分支的最新一次提交

git clone -b <指定分支名> --single-branch --depth 1 https://xxxx/xxxx/xxxx.git

本文 Git 命令汇总

命令描述
git config --global user.name "User Name"初始化配置用户名
git config --global user.email "email...com"初始化配置邮箱
git init初始化 Git 仓库
git add -A

git add -.

git add -*
将工作区所有文件添加到暂存区
git commit -m "日志"将暂存区的所有文件提交到版本区
git status
git status -s
查看当前仓库的状态
git rm --cached <文件名>撤销暂存区指定文件
git rm --cached -r .撤销暂存区所有文件
git diff 差异对比 工作区暂存区
git diff --cached差异对比 版本区暂存区
git log

git log --oneline

git reflog*
查看当前分支的版本提交记录
git reset --hard [版本号]版本回退
git branch查看当前有哪些分支 / 创建一个分支
git checkout <分支名>切换到指定的分支
git merge <要与其合并的分支名>将指定的分支与当前所在的分支做合并
git branch -d <分支名>删除指定的分支
git rebase <要将当前分支变基到的目标分支名>分支变基
git tag 标签名 版本号给指定提交打 轻量标签
git tag -a 标签名 版本号 -m "标签描述"给指定提交打 附注标签
git tag查看标签
git show 标签名查看标签信息
git tag -d 标签名删除标签
git checkout <提交版本号>签出一个临时的游离分支
git remote add <远程仓库别名> <远程仓库地址> 将本地仓库关联到一个远程仓库
git remote -v查看所关联远程仓库
git remote set-url 更改远程仓库
git remote remove <远程仓库别名> 删除远程仓库
git push -u origin master将本地仓库分支推送到远程仓库分支
git pull拉取远程仓库分支
git clone 克隆远程仓库

在这里插入图片描述


🚵‍♂️ 博主座右铭:向阳而生,我还在路上!
——————————————————————————————
🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!
——————————————————————————————
🤼‍♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】
——————————————————————————————

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

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

相关文章

jQuery中的api操作

1、认识jQuery jQuery函数 , jQuery的别 "$" , $也是一个函数. // $(function(){})// $ 是什么? $ 是一个函数// console.log(typeof $);// function// $ 是jQuery的别名?// window.jQuery window.$ jQuery;// console.log(jQuery $);// true 2、文档遍历和操…

北京筑龙当选中招协第二届招标采购数字化专业委员会执行主任单位

4月18-19日&#xff0c;中国招标投标协会&#xff08;以下简称中招协&#xff09;2024年年会在宁波召开&#xff0c;北京筑龙作为中招协理事会员单位受邀出席会议。会议期间举行了“电子招标采购专业委员会换届会议暨第二届第一次工作会议”&#xff0c;北京筑龙当选第二届招标…

用代码给孩子造“钱”

起因 作为家里有两个娃的奶爸&#xff0c;时长为了孩子乱花钱而焦虑不已。然后最近看到一段短视频说了这么段话。 父母不要被动给孩子买东西&#xff0c;而是定期给孩子钱。让孩子自己管钱培养她对于钱的认知和理财的观念。 突然感觉大师我悟了。感觉值得一试。于是就打算给他…

如何在官网查看Qt5的所有模块?

2024年4月23日&#xff0c;周二上午 如果你不想一步步来的话&#xff0c;可以直接去这个Qt官方链接 https://doc.qt.io/qt-5/qtmodules.html 第一步&#xff1a;去到Qt官网 https://www.qt.io/ 第二步&#xff1a;点击文档链接 第三步&#xff1a;选择文档中的“Qt5” 第四步…

Python项目开发实战:如何自动化读取Excel数据文件并用可视化分析

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python项目开发实战_自动化读取Excel数据文件并用可视化分析_编程案例实例课程教程.pdf 1、可视化分析的特点 在Python项目开发实战中,可视化分析扮…

Python中的tkinter工具包帮助文档查询以及Python其他GUI工具包分类

Python中的tkinter工具包帮助文档查询以及Python其他GUI工具包分类 虽然Python支持许多GUI工具包&#xff0c;然而Tkinter是Python的实际标准GUI&#xff08;图形用户界面&#xff09;包&#xff0c;也是最常用的一种。本文简要介绍tkinter工具包帮助文档查询以及Python其他GU…

SpanBert学习

SpanBERT: Improving Pre-training by Representing and Predicting Spans 核心点 提出了更好的 Span Mask 方案&#xff0c;也再次展示了随机遮盖连续一段字要比随机遮盖掉分散字好&#xff1b;通过加入 Span Boundary Objective (SBO) 训练目标&#xff0c;增强了 BERT 的性…

flask_apscheduler 定时任务框架

简介 Flask_apscheduler是一个在Flask框架中使用的APScheduler库的扩展。APScheduler是一个用于调度任务的Python库&#xff0c;可以在指定的时间间隔调度函数、方法或任意可调用对象的执行。 Flask_apscheduler对APScheduler进行了集成&#xff0c;使得在Flask应用中可以简便…

FFmpeg 源码分析:av_seek_frame()

[TOC](FFmpeg 源码分析&#xff1a;av_seek_frame()) FFmpeg 源码分析&#xff1a;av_seek_frame() 函数原型 av_seek_frame() 是 FFmpeg 中的一个函数&#xff0c;位于 libavformat/avformat.h&#xff0c;用于定位媒体文件中的某一帧。 下面是 av_seek_frame() 的函数定义…

Python小功能实现(链接下载图品并存储到EXCEL中)

import os import requests from openpyxl import Workbook from openpyxl.drawing.image import Image from concurrent.futures import ThreadPoolExecutor# 图片链接列表 image_urls ["https://uploads/file/20230205/f85Lpcv8PXrLAdmNUDE1Hh6xqkp0NHi2gSXeqyOb.png&q…

ctfshow——XSS

文章目录 XSS介绍什么是xss&#xff1f;XSS危害XSS的分类常用XSSpayload web316——反射型XSSweb317——过滤<script> web318——过滤script、imgweb319——不止过滤script、imgweb320——过滤空格web321——不止过滤空格web322——不止过滤空格web323web324web 325web32…

【笔记】短信服务设计记录

模块拆分&#xff1a; - 服务配置 - 模板 - 计费 - 日志 - 验证码管理 - 发送任务的管理 思考点 怎么与用户&#xff08;手机&#xff09;绑定&#xff0c;如何防止频繁调用。 策略模式来适配多种不同短信发送通道的场景。 短信任务管理&#xff0c;轮询和异步对生产者消…

报名 | Qt汽车及工业行业解决方案及实战训练 深圳站(5月15日 星期三)

加入我们的Qt技术培训&#xff0c;探索跨平台应用开发的无限可能&#xff01;本次培训将深入Qt框架&#xff0c;涵盖从基础概念到高级功能的全方位知识&#xff0c;无论您是刚入门的新手还是希望提升技能的资深开发者&#xff0c;都能在此找到适合自己的学习路径。通过实践案例…

OpenTelemetry-2.Go接入Jaeger(grpc,gin-http)

目录 1.什么是OpenTelemetry 2.搭建jaeger 3.链路追踪 本地调用 远程调用 GRPC proto server端 client端 Gin-HTTP 调用流程 api1 api2 grpc 4.完整代码 1.什么是OpenTelemetry 参考&#xff1a;OpenTelemetry-1.介绍-CSDN博客 2.搭建jaeger 参考&#xff1a;…

Node.js 环境变量动态获取和静态获取的区别

Node.js 环境变量动态获取和静态获取的区别 Node.js 环境 vs 浏览器环境 process.env.SERVICE_PORTAL: 适用环境&#xff1a;Node.js 环境。用途&#xff1a;访问操作系统的环境变量。 import.meta.env.SERVICE_PORTAL: 适用环境&#xff1a;浏览器环境&#xff0c;特别是在使…

齐护K210系列教程(八)_LCD显示图片

LCD显示图片 文章目录 LCD显示图片1&#xff0c;显示单张图片2&#xff0c;通过按键切换显示SD卡内的图片3&#xff0c;通过传感器切换图片4&#xff0c;画中画显示&#xff0c;并缩放5&#xff0c;课程资源 联系我们 AIstart 显示的图片的默认分辨率为&#xff1a;320*240 &am…

使用ROC指标100次盈利交易后,众汇才明白的道理

使用ROC指标100次盈利交易后才明白的道理&#xff0c;众汇外汇认为盈利的基本就是考虑这些指标。 ①.资产波动性 需要考虑到资产波动性&#xff0c;根据资产的波动性更改设置&#xff0c;设置的结果会告诉投资者这段时间的平均波动率。 ②添加过滤器。交易系统的主要指标是趋…

MySQL无法打开情况下读取frm文件的表结构

一、背景&#xff1a; 开发人员通过MySQL客户端工具&#xff0c;可以访问MySQL5.7.6&#xff0c;可以访问具体的DB&#xff0c;可以查看小写表的数据&#xff0c;但是无法查看大写表的数据&#xff0c;报错信息为“table does not exist”。 二、检查与分析&#xff1a; ssh登录…

AXI4 ---排序模型

1. 排序模型的定义 AXI4协议支持一种基于AXI ID事务标识符使用的排序模型。原则是对于具有相同ID的事务&#xff1a; 针对任何单个外围设备的事务&#xff0c;必须按照它们被发出的顺序到达外围设备&#xff0c;无论事务的地址是什么。使用相同或重叠地址的内存事务必须按照它…

matlab代码

&#xff08;一&#xff09; % 你可以根据实际的分隔符进行设置 opts delimitedTextImportOptions(Delimiter, ,); % 读入(.txt)文档&#xff0c;文档以分隔符进行分离 -> table data readtable(D:\QT_Project\servo\recvData.txt, opts);% table -> cell dataMatr…