分布式版本控制工具 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 -A

git 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 克隆远程仓库

在这里插入图片描述


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux的FTP服务

目录 1.什么是FTP服务&#xff1f; 2.FTP的工作原理和流程 1 主动模式 2 被动模式 3.搭建和配置FTP服务 1 下载服务包、备份配置文件 2 修改配置文件​编辑 3 匿名访问测试 4 设置黑白命令 1.什么是FTP服务&#xff1f; FTP&#xff08;file Transfer Protocol&#…

Java:二叉树(1)

从现在开始&#xff0c;我们进入二叉树的学习&#xff0c;二叉树是数据结构的重点部分&#xff0c;在了解这个结构之前&#xff0c;我们先来了解一下什么是树型结构吧&#xff01; 一、树型结构 1、树型结构简介 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>…

三角函数与其他复杂函数在C语言中的实现:CORDIC算法、泰勒公式、查表法与math库详解

在C语言中实现三角函数&#xff0c;通常有四种主要方法&#xff1a;CORDIC算法、泰勒公式展开、查表法以及直接调用C语言的标准数学库。接下来我们将详细介绍这四种方法&#xff0c;并探讨其他可能的补充实现手段。 1. CORDIC算法 CORDIC&#xff08;Coordinate Rotation Dig…

DDR3简介

文章目录 前言一、ddr_stress_tester_v2.90配置流程二、将inc配置文件下载到板子上1.连接方式2.打开DDR_Tester 软件 uboot中DDR初始化的修改 前言 &#x1f4a6;DDR3在自己做完板子后需要验证下&#xff0c;测试DDR3是否能正常使用&#xff0c;如果不能正常使用&#xff0c;其…

前缀和 求数列的子序列的K倍区间

(直接截图比复制文字要好多了) 不会做的时候我去看了之前做的关于这道题目的笔记&#xff0c; &#xff08;Ak 1&#xff09;% k 1 &#xff08;Ak 1 Ak&#xff09;% k 1 只要发现了同余数的情况就说明有一个区间满足了题目的要求。 这个方法的精妙之处就在于前缀和包括了…

STM32H7使用FileX库BUG,SD卡挂载失败

问题描述&#xff1a; 使用STM32H7ThreadXFileX&#xff0c;之前使用swissbit牌的存储卡可正常使用&#xff0c;最近项目用了金士顿的存储卡&#xff0c;发现无法挂载文件系统。 原因分析&#xff1a; 调试过程发现&#xff0c;关闭D-Cache可以挂载使用exfat文件系统。 File…

C语言-用二分法在一个有序数组中查找某个数字

1.题目描述 有15个数按由大到小顺序放在一个数组中&#xff0c;输入一个数&#xff0c;要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中&#xff0c;则输出“无此数” 二.思路分析 记录数组中左边第一个元素的下标为left&#xff0c;记录数组右边第一个…

2024年畜牧、养殖业与智慧农业国际会议(ICLAHSA2024)

2024年畜牧、养殖业与智慧农业国际会议(ICLAHSA2024) 会议简介 2024国际畜牧业与智慧农业大会&#xff08;ICLAHSA2024&#xff09;将在深圳隆重举行。本次大会旨在汇聚全球畜牧业、畜牧业、智慧农业等领域的专家学者&#xff0c;共同探索行业前沿技术、创新模式和发展趋势…

电脑回收站的东西还原后会在哪里?一文给你答案!

“很奇怪&#xff0c;想问问大家&#xff0c;我电脑回收站里还原的文件会被保存在哪里呀&#xff1f;刚刚恢复文件的时候本来想直接将它拖出&#xff0c;却发现文件不见了&#xff0c;这种情况应该怎么解决呢&#xff1f;” 电脑回收站是一个特殊的文件夹&#xff0c;用于临时存…

【LLMOps】小白详细教程,在Dify中创建并使用自定义工具

文章目录 博客详细讲解视频点击查看高清脑图 1. 搭建天气查询http服务1.1. flask代码1.2. 接口优化方法 2. 生成openapi json schema2.1. 测试接口2.2. 生成openapi schema 3. 在dify中创建自定义工具3.1. 导入schema3.2. 设置工具认证信息3.3. 测试工具 4. 调用工具4.1. Agent…

PC-3000 Mobile Pro: 智能手机及平板设备数据提取工具

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设…

跨境电商亚马逊、虾皮等平台做测评要用什么IP?

IP即IP地址&#xff0c;IP地址是指互联网协议地址&#xff08;英语&#xff1a;Internet Protocol Address&#xff0c;又译为网际协议地址&#xff09;&#xff0c;是IP Address的缩写&#xff0c;IP地址是IP协议提供的一种统一的地址格式 功能&#xff1a;它为互联网上的每一…

SpringMVC笔记——SpringMVC基础Tomcat环境配置

Tomcat安装配置 下载Apache Tomcat 进入官网https://tomcat.apache.org/&#xff0c;选择tomcat 9 这边使用idea开发&#xff0c;建议直接下载压缩包 无法访问下载的可以直接用我的下载链接&#xff1a;https://cloudreve.zxbdwy.online/s/6nSA 提取码&#xff1a;w1pwk3将压…

嵌入式学习60-C++

知识零碎&#xff1a; C# &#xff1a;window下用于vs stdio编程 …

Pyside6:QDialog按钮变为中文

如果在Qt Designer中创建了一个Qdialog&#xff0c;自带按钮的类型&#xff0c;那么在Designer中显示是中文&#xff0c;但在运行时将变成英文。 如果程序不需要进行国际化&#xff0c;只在国内使用&#xff0c;那么进行中文化的操作还是有必要的&#xff0c;其实方式很简单&am…

常见七大排序(汇总)

目录 引言 交换函数 直接插入排序 思想 时间复杂度 希尔排序 思想 时间复杂度 选择排序 思想 时间复杂度 堆排序 思想 时间复杂度 冒泡排序 思想 时间复杂度 快速排序&#xff08;递归&#xff09; 霍尔法 前后指针法 三数取中 & 随机值法 第一种是随…

C++ 核心编程 - 内存分区模型

文章目录 1.1 程序运行前1.2 程序运行后1.3 new 操作符 C 程序在执行时&#xff0c;将内存大致划分为 4个区域&#xff1a; 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理&#xff1b;全局区&#xff1a;存放全局变量和静态变量以及常量&#xff1…

【CSS】CSS实现元素逐渐消失(实现元素透明逐渐消失/模糊)

mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 10%);mask-image 属性用于定义一个遮罩&#xff0c;它可以隐藏元素的一部分或全部内容。在这个示例中&#xff0c;我们使用 mask-image 属性来定义一个线性渐变的遮罩&#xff0c;使得列表项的内…

nginx配置ip_hash负载均衡策略

一、nginx配置ip_hash负载均衡策略 nginx默认的负载均衡策略为轮询&#xff0c;某些场景需要使用ip_hash负载策略&#xff0c;即&#xff1a;同一个ip地址&#xff0c;永远访问nginx后面同一台tomcat。配置示例如下&#xff0c;主要是设置ip_hash&#xff1a; upstream www.ab…

机器视觉系统-工业光源什么是高角度光,以及发光角度得分类

光路描述&#xff1a;光线与水平面角度>45称为高角度光。 效果分析&#xff1a;高角度照射&#xff0c;光线经 被测物表面平整部分反射后进入镜头&#xff0c;图像效果表现为灰度值较高&#xff1b;不平整部分反射光进入不了镜头&#xff0c;图像效果表现为灰度值较低。 主要…