分布式版本控制工具 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,一经查实,立即删除!

相关文章

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

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中的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 的性…

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…

报名 | 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;…

齐护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登录…

圈子交友系统话题设置-免费圈子社区论坛交友系统-圈子交友系统功能介绍-APP小程序H5多端源码交付!

1. 圈子的独特创造与精心管理 源码赋予用户创造独特圈子的能力&#xff0c;为志同道合的人们打造一个分享兴趣、交流见解的平台。每个圈子都可以个性化定制主题、标签和规则&#xff0c;以确保圈子具备个性特点和强烈的社群感。作为圈子的创建者&#xff0c;您将享有自由编辑资…

Ableton Live 12 Suite for Mac/Win:引领音乐制作新纪元的创意神器

在数字音乐制作领域&#xff0c;Ableton Live 12 Suite无疑是一颗璀璨的明星。这款强大的音乐制作工具&#xff0c;无论你是Mac用户还是Windows用户&#xff0c;都能为你带来前所未有的音乐创作体验。 Ableton Live 12 Suite的出色之处在于其全面而精细的功能设计。从音频录制…

计算机考研|25科软值得冲吗?会不会炸?

给大家看一串数字&#xff1a;3300 4300 1400 3300 3900 没错&#xff0c;这就是科软这几年的报考学生的实际情况&#xff0c;21年的时候&#xff0c;报考人数达到了峰值&#xff0c;有4300人&#xff0c;当年复试线388分真的可以说是炸穿地心。24年报考人数3900人&#xff0c…

485口还是网口?西门子PLC通讯方式到底怎么选?

西门子作为最早进入中国市场的工控厂家&#xff0c;其市场占有率一直非常高。 西门子PLC的品质非常好&#xff0c;其网络稳定性、开放性深受工控人员的喜爱&#xff0c;而且编程软件分类多&#xff0c;使用方便。在国内工控界具有显著地位。 虽然大家对西门子PLC都有一定的了…

酚类壳聚糖Dextran和F127-CHO胶束交联形成可注射水凝胶

酚类壳聚糖Dextran和F127-CHO胶束交联形成可注射水凝胶 形成水凝胶的过程 壳聚糖与酚类小分子的偶联&#xff1a;壳聚糖是一种天然的、具有多个氨基和羟基的多糖&#xff0c;这些功能基团使其能够与酚类小分子进行化学偶联。酚类小分子可以通过共价键&#xff08;如酰胺键或醚…

vue3引入图片 无法使用require, vue3+vite构建项目使用require引入包出现问题需要用newURL来动态引入图片等静态资源

在vue3中 require引入图片的本地资源报错Uncaught (in promise) ReferenceError: require is not defined <template> <img :src"imageSrc" alt"My Image"> </template> <script> import imageSrc from /assets/image.png; export…

研究发现:提示中加入数百个示例显著提升大型语言模型的性能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

机器学习(XgBoost)预测顶和底

之前的文章中&#xff0c;我们对中证1000指数进行了顶和底的标注。这一篇我们将利用这份标注数据&#xff0c;实现机器学习预测顶和底&#xff0c;并探讨一些机器学习的原理。 我们选取的特征非常简单–上影线和WR&#xff08;William’s R&#xff09;的一个变种。选取这两个…