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

news/2024/5/19 14:53:33

在这里插入图片描述

在这里插入图片描述

文章目录

  • 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.mrgr.cn/p/28845730

相关文章

Pandas 2.2 中文官方教程和指南(一)

原文:pandas.pydata.org/docs/安装原文:pandas.pydata.org/docs/getting_started/install.html安装 pandas 的最简单方法是作为Anaconda发行版的一部分安装,这是一个用于数据分析和科学计算的跨平台发行版。Conda包管理器是大多数用户推荐的安装方法。 还提供了从源代码安装…

Pandas 2.2 中文官方教程和指南(十三)

原文:pandas.pydata.org/docs/写时复制(CoW)原文:pandas.pydata.org/docs/user_guide/copy_on_write.html注意 写时复制将成为 pandas 3.0 的默认设置。我们建议现在就启用它以从所有改进中受益。 写时复制首次引入于版本 1.5.0。从版本 2.0 开始,大部分通过 CoW 可能实现…

Pandas 2.2 中文官方教程和指南(十七)

原文:pandas.pydata.org/docs/重复标签原文:pandas.pydata.org/docs/user_guide/duplicates.htmlIndex对象不需要是唯一的;你可以有重复的行或列标签。这一点可能一开始会有点困惑。如果你熟悉 SQL,你会知道行标签类似于表上的主键,你绝不希望在 SQL 表中有重复项。但 pan…

Pandas 2.2 中文官方教程和指南(三)

原文:pandas.pydata.org/docs/如何操作文本数据原文:pandas.pydata.org/docs/getting_started/intro_tutorials/10_text_data.html将所有名称字符改为小写。 In [4]: titanic["Name"].str.lower() Out[4]: 0 braund, mr. owen har…

Pandas 2.2 中文官方教程和指南(十八)

原文:pandas.pydata.org/docs/可空整数数据类型原文:pandas.pydata.org/docs/user_guide/integer_na.html注意 IntegerArray 目前处于实验阶段。其 API 或实现可能会在没有警告的情况下发生变化。使用pandas.NA作为缺失值。 在处理缺失数据中,我们看到 pandas 主要使用NaN来…

【解决NodeJS项目无法在IDEA中调试的问题】使用JetBrains IDEA 2023 调试nodejs项目

项目采用Ant Design Pro React&#xff0c;使用前后端分离开发方式&#xff0c;后端可以很容易的打断点调试&#xff0c;但是前端通过网页进行调试&#xff0c;在IDEA中加了调试断点&#xff0c;但是没有什么用处。 解决方案如下&#xff1a; 点击新建运行配置 新建JavaScrip…

蓝桥杯管道

一开始拿到这道题没有什么头绪。综合各路大佬题解&#xff0c;一下子豁然开朗。 题眼&#xff1a;每一段感受器都感受到水的最早时间。由于整个管道&#xff0c;分为多个段&#xff0c;每个段都有一个感受器。所以题眼翻译为&#xff1a;覆盖满整条管道&#xff0c;所需要的最短…

数据结构(学习笔记)王道

一、绪论 1.1 数据结构的基本概念 数据&#xff1a;是信息的载体&#xff0c;是描述客观事物属性的数、字符以及所有输入到计算机中并被计算机程序识别和处理的符号的集合。&#xff08;计算机程序加工的原料&#xff09;数据元素&#xff1a;数据的基本单位&#xff0c;由若干…

Python GUI开发- PyQt5 开发小工具环境入门

前言 常见的python开发gui的库有 Tkinter, PyQt5, wxPython等。本教程是选择PyQt5 开发桌面小工具。 环境准备 只需pip安装即可快速准备好开发环境 pip install pyqt5快速开始 创建一个空的window窗口 Qapplication():每个GUI都必须包含一个Qapplication,argv表示获取命令行…

CentOS 7.9.2007 中Docker使用GPU

一、安装nvidia驱动 1.1&#xff0c;查看显卡驱动 # 查看显卡型号 lspci | grep -i nvidia 1.2&#xff0c;进入 PCI devices &#xff0c;输入上一步查询到的 2204 1.3&#xff0c;进入 官方驱动 | NVIDIA&#xff0c;查询 Geforce RTX 3090 驱动并下载 1.4&#xff0c;禁用…

QFD赋能人工智能:打造智能化需求分析与优化新纪元

在科技飞速发展的今天&#xff0c;人工智能(AI)已经渗透到我们生活的方方面面。然而&#xff0c;如何让AI更加贴合用户需求&#xff0c;提供更加精准和个性化的服务&#xff1f;这成为了一个亟待解决的问题。质量功能展开&#xff08;Quality Function Deployment&#xff0c;简…

kubernetes安装ingress-nginx

下载安装文件 首先&#xff0c;需要匹配Ingress-nginx版本和kubernetes版本。 在https://github.com/kubernetes/ingress-nginx可以找到&#xff0c;如下图所示&#xff1a; 这里一定要选择kubernetes对应的ingress-nginx版本 要不会报一些奇怪的错误&#xff01; 博主k8s版本…

oracle连接数据库报错ORA-12541:TNS:无监听程序

最近闲来无事修改了电脑的用户名,本来以为不会影响什么,后来发现oracle数据库连接不上了,报错如下图:查看服务发现确实停止了,启动也启动不起来了搜索Net Manager查看配置, 发现配置里面是我修改前的电脑名,才发现问题所在,随后我又把电脑名称改回来了数据库才能正常连…

Pandas 2.2 中文官方教程和指南(二十二)

原文:pandas.pydata.org/docs/时间增量原文:pandas.pydata.org/docs/user_guide/timedeltas.html时间增量是时间之间的差异,以不同的单位表示,例如天、小时、分钟、秒。它们可以是正数也可以是负数。 Timedelta是datetime.timedelta的子类,并且行为类似,但也允许与np.tim…

钉钉OA审批评论接口,如何@ 人并发送通知

钉钉OA审批评论接口&#xff0c;如何 人并发送通 问题描述&#xff1a; 相关接口&#xff1a;https://oapi.dingtalk.com/topapi/process/instance/comment/add 我希望在钉钉oa审批流程中&#xff0c;添加评论的同时通过“”或者其他方式提醒流程发起人去跟进审批工作。 但我…

Pandas 2.2 中文官方教程和指南(二)

原文:pandas.pydata.org/docs/如何在 pandas 中创建图表?原文:pandas.pydata.org/docs/getting_started/intro_tutorials/04_plotting.htmlIn [1]: import pandas as pdIn [2]: import matplotlib.pyplot as plt 本教程使用的数据:空气质量数据 本教程使用关于(NO_2)的空气…

ROS轻松入门(一)—— 基本概念:node节点、topic通信、service通信

node节点 ROS 中的每个节点都应该负责单一的、模块化的目的&#xff0c;例如控制车轮马达或发布来自激光测距仪的传感器数据。每个节点都可以通过主题、服务、操作或参数从其他节点发送和接收数据。 一个完整的机器人系统由许多协同工作的节点组成。在 ROS 2 中&#xff0c;单…

数据库之数据库恢复技术思维导图+大纲笔记

大纲笔记&#xff1a; 事务的基本概念 事务 定义 用户定义的一个数据库操作系列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的基本单位 语句 BEGIN TRANSACTION 开始 COMMIT 提交&#xff0c;提交事务的所有操作 ROLLBACK 回滚&#xff0c…

什么是敏捷发布规划

敏捷发布规划基于项目路线图和产品发展愿景,提供了高度概括的发布进度时间轴(通常是 3 到 6个月)。同时,敏捷发布规划还确定了发布的迭代或冲刺次数,使产品负责人和团队能够决定需要开发的内容,并基于业务目标、依赖关系和障碍因素确定达到产品放行所需的时间。 对客户而…

李沐57_长短期记忆网络LSTM——自学笔记

LSTM 1.忘记门&#xff1a;将值朝着0减少 2.输入门&#xff1a;决定不是忽略掉输入数据 3.输出门&#xff1a;决定是不是使用隐状态 !pip install --upgrade d2l0.17.5 #d2l需要更新首先加载时光机器数据集。 import torch from torch import nn from d2l import torch a…