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

文章目录

Git简介

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

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

下载安装

下载地址 Git官网下载地址


基本使用

起始配置

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

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

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


Git 的三个区域

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

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


基本操作流程

  1. 在项目根目录下执行 git init 初始化命令 会生成一个 .git 文件夹,这样就成功的初始化了一个本地仓库,而此时根目录下的文件就处于工作区
javascript 复制代码
git init
  1. 执行命令 git add [file],可以指定将某个指定文件提交到暂存区,同时也可以执行以下三种命令之一,将工作区的所有文件都提交到暂存区
javascript 复制代码
git add -A

git add * 

git add .
  1. 执行命令 git commit -m '提交的备注'暂存区的所有文件提交到版本控制区,这时候,这个文件就真正的受到了 Git 的版本控制,并生成了一个独一无二的版本记录
javascript 复制代码
git commit -m "提交了a文件"

流程图示:


查看仓库状态

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

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

如果此时工作区有一个文件,还没有提交暂存区则会提示:

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


删除(撤销暂存区)

运行以下命令:

javascript 复制代码
git rm --cached <file>  //撤销暂存区指定文件

git rm --cached -r .  //撤销暂存区所有文件

差异对比

运行以下命令:

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

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


查看版本日志

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

  • git log
javascript 复制代码
git log
  • git log --oneline

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

javascript 复制代码
git log --oneline
  • git reflog

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

javascript 复制代码
git reflog

版本回退

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

  • 使用 git reset --hard 命令进行版本之间的切换回滚
javascript 复制代码
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 分支的内容了,同时也可以看到合并后的版本提交记录了。


合并分支(提交合并)

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


删除分支

javascript 复制代码
git branch -d  <分支名>  //删除分支
git branch -D  <分支名>  // 强制删除分支

备注说明:

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

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

分支变基

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

命令

javascript 复制代码
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 账号。

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

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

javascript 复制代码
git remote add origin https://xxxx/xxxx/xxxxx.git

注明:

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

推送远程

javascript 复制代码
git push -u origin master

备注说明:

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

拉取远程分支代码

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

javascript 复制代码
git pull   

说明:

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

关于冲突

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

克隆远程库

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

javascript 复制代码
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 参数可以克隆仓库的最近一次提交,这样可以减少克隆所需的时间和空间。

javascript 复制代码
git clone --depth 1 https://xxxx/xxxx/xxxx.git

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

javascript 复制代码
git clone -b <指定分支名> --single-branch https://xxxx/xxxx/xxxx.git

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

javascript 复制代码
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 克隆远程仓库

🚵‍♂️ 博主座右铭:向阳而生,我还在路上!


🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!


🤼‍♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】


相关推荐
int WINGsssss1 小时前
Git使用
git
用户0760530354383 小时前
Git Revert:安全移除错误提交的方式
git
极客先躯4 小时前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略
niu_sama5 小时前
仿RabbitMQ实现消息队列三种主题的调试及源码
分布式·rabbitmq
鸡c5 小时前
rabbitMq------客户端模块
分布式·rabbitmq·ruby
Dylanioucn6 小时前
【分布式微服务云原生】探索Redis:数据结构的艺术与科学
数据结构·redis·分布式·缓存·中间件
路上^_^6 小时前
00_概览_kafka
分布式·kafka
西柚与蓝莓9 小时前
任务【浦语提示词工程实践】
github
极客先躯13 小时前
Hadoop krb5.conf 配置详解
大数据·hadoop·分布式·kerberos·krb5.conf·认证系统
CopyLower14 小时前
Kafka 消费者状态及高水位(High Watermark)详解
分布式·kafka