【DevOps】Git 图文详解(四):Git 使用入门

Git 图文详解(四):Git 使用入门

  • 1.创建仓库
  • 2.暂存区 add
  • 3.提交 commit 记录
  • 4.Git 的 “指针” 引用
  • 5.提交的唯一标识 id,HEAD~n 是什么意思?
  • 6.比较 diff

1.创建仓库

创建本地仓库的方法有两种:

  • 一种是创建全新的仓库:git init,会在当前目录初始化创建仓库。
  • 另一种是克隆远程仓库:git clone [url]
# 准备一个文件夹“KwebNote”作为仓库目录,命令行进入该文件夹
Kwongad@Kwongad-T14 MINGW64 ~
$ cd d:
Kwongad@Kwongad-T14 MINGW64 /d
$ cd Project_Files
Kwongad@Kwongad-T14 MINGW64 /d/Project_Files
# 多次cd指令进入到仓库目录KwebNote:“cd <目录名称>”指令进入目录,“cd ..”返回上级目录(有空格)
Kwongad@Kwongad-T14 MINGW64 /d/Project_Files/github.kwong/KwebNote# 开始初始化项目,也可指定目录:git init [文件目录]
$ git init
Initialized empty Git repository in D:/Project_Files/github.Kwong/KwebNote/.git/

📢注意:Git 指令的执行,都需在仓库目录下。

创建完多出了一个被隐藏的 .git 目录,这就是本地仓库 Git 的工作场所。

在这里插入图片描述
克隆远程仓库,如在 GitHub 上创建的仓库 https://github.com/kwonganding/KWebNote.git

$ git clone 'https://github.com/kwonganding/KWebNote.git'
Cloning into 'KWebNote'...
remote: Enumerating objects: 108, done.
remote: Counting objects: 100% (108/108), done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 108 (delta 48), reused 88 (delta 34), pack-reused 0
Receiving objects: 100% (108/108), 9.36 KiB | 736.00 KiB/s, done.
Resolving deltas: 100% (48/48), done.

会在当前目录下创建 KWebNote 项目目录。

在这里插入图片描述

2.暂存区 add

可以简单理解为,git add 命令就是把要提交的所有修改放到暂存区(Stage),然后,执行 git commit 就可以一次性把暂存区的所有修改提交到仓库。

指令
描述
git add [file1] [file2]添加文件到暂存区,包括修改的文件、新增的文件
git add [dir]同上,添加目录到暂存区,包括子目录
git add .同上,添加所有修改、新增文件(未跟踪)到暂存区
git rm [file]删除工作区文件,并且将这次删除放入暂存区
# 添加指定文件到暂存区,包括被修改的文件
$ git add [file1] [file2] ...# 添加当前目录的所有文件到暂存区
$ git add .# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

修改文件 R.md,未暂存:

在这里插入图片描述

执行 git add . 暂存:

在这里插入图片描述

3.提交 commit 记录

git commit 提交是以时间顺序排列被保存到数据库中的,就如游戏关卡一样,每一次提交(commit)就会产生一条记录:id + 描述 + 快照内容。

  • 🔸commit id:根据修改的文件内容采用摘要算法(SHA1)计算出不重复的 40 40 40 位字符,这么长是因为 Git 是分布式的,要保证唯一性、完整性,一般本地指令中可以只用前几位( 6 6 6)。即使多年以后,依然可通过 id 找到曾经的任何内容和变动,再也不用担心丢失了。
  • 🔸描述:针对本次提交的描述说明,建议准确填写,就跟代码中的注释一样,很重要。
  • 🔸快照:就是完整的版本文件,以对象树的结构存在仓库下 \.git\objects 目录里,这也是 Git 效率高的秘诀之一。
  • SHA1 是一种哈希算法,可以用来生成数据摘要。
  • Git 不适合大的非文本文件,会影响计算摘要、快照的性能。

多个提交就形成了一条时间线,每次提交完,会移动当前分支 masterHEAD 的 “指针” 位置。

在这里插入图片描述
Sourcetree上的历史记录:

在这里插入图片描述

📢一般情况,每完成一个小功能、一个 Bug 就可以提交一次,这样会形成比较清晰的历史记录。

指令
描述
git commit -m ‘说明’提交变更,参数 -m 设置提交的描述信息,应该正确提交,不带该参数会进入说明编辑模式
git commit -a参数 -a,表示直接从工作区提交到版本库,略过了 git add 步骤,不包括新增的文件
git commit [file]提交暂存区的指定文件到仓库区
git commit --amend -m使用一次新的 commit,替代上一次提交,会修改 commithash 值(id
git log -n 20查看日志(最近 20 20 20 条),不带参数 -n 则显示所有日志
git log -n 20 --oneline参数 -‌-oneline 可以让日志输出更简洁(一行)
git log -n 20 --graph参数 -‌-graph 可视化显示分支关系
git log --follow [file]显示某个文件的版本历史
git blame [file]以列表形式显示指定文件的修改记录
git reflog查看所有可用的历史版本记录(实际是 HEAD 变更记录),包含被回退的记录(重要)
git status查看本地仓库状态,比较常用的指令,加参数 -s 简洁模式

在这里插入图片描述
通过 git log 指令可以查看提交记录日志,可以很方便的查看每次提交修改了哪些文件,改了哪些内容,从而进行恢复等操作。

# 提交暂存区到仓库区
$ git commit -m [message]
# 提交所有修改到仓库
$ git commit -a -m'修改README的版权信息'# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]$ git log -n 2
commit 412b56448568ff362ef312507e78797befcf2846 (HEAD -> main)
Author: Kanding <123anding@163.com>
Date:   Thu Dec 1 19:02:22 2022 +0800commit c0ef58e3738f7d54545d8c13d603cddeee328fcb
Author: Kanding <123anding@163.com>
Date:   Thu Dec 1 16:52:56 2022 +0800# 用参数“--oneline”可以让日志输出更简洁(一行)
$ git log -n 2 --oneline
5444126 (HEAD -> main, origin/main, origin/HEAD) Update README.md
228362e Merge branch 'main' of github.com:kwonganding/KWebNote

4.Git 的 “指针” 引用

Git 中最重要的就是提交记录了,其他如 标签分支HEAD 都是对提交记录的 “指针” 引用,指向这些提交记录,理解这一点很重要。

  • 提交记录之间也存在 “指针” 引用,每个提交会指向其上一个提交。
  • 标签:就是对某一个提交记录的 固定 “指针” 引用,取一个别名更容易记忆一些关键节点。存储在工作区根目录下 .git\refs\tags
  • 分支:也是指向某一个提交记录的 “指针” 引用,“指针” 位置可变,如提交、更新、回滚。存储在工作区根目录下 .git\refs\heads
  • HEAD:指向当前活动分支(最新提交)的一个 “指针” 引用,存在在 .git/HEAD 文件中,存储的内容为 ref: refs/heads/master

在这里插入图片描述
上图中:

  • HEAD 始终指向当前活动分支,多个分支只能有一个处于活动状态
  • 标签 t1 在某一个提交上创建后,就不会变了。而分支、HEAD 的位置会改变。

打开这些文件内容看看,就更容易理解这些 “指针” 的真面目了。

# tag
$ git tag -a 'v1' -m 'v1版本'
$ cat .git/refs/tags/v1
a2e2c9caea35e176cf61e96ad9d5a929cfb82461# main分支指向最新的提交
$ cat .git/refs/heads/main
8f4244550c2b6c23a543b741c362b13768442090# HEAD指向当前活动分支
$ cat .git/HEAD
ref: refs/heads/main# 切换到dev分支,HEAD指向了dev
$ git switch dev
Switched to branch 'dev'
$ cat .git/HEAD
ref: refs/heads/dev

这里的主分支名字为 main,是因为该仓库是从 GitHub 上克隆的,GitHub 上创建的仓库默认主分支名字就是 main,本地创建的仓库默认主分支名字为 master

📢 “指针” 引用:之所以用引号的 “指针”,是为了便于统一和理解。和指针原理类似,都是一个指向,只是实际上可能更复杂一点,且不同的 “指针” 引用会有区别。

5.提交的唯一标识 id,HEAD~n 是什么意思?

每一个提交都有一个唯一标识,主要就是提交的 hashcommit id,在很多指令中会用到,如版本回退、拣选提交等,需要指定一个提交。那标识唯一提交有两种方式:

  • 首先就是 commit id,一个 40 40 40 位编码,指令中使用的时候可以只输入前几位( 6 6 6 位)即可。
  • 还有一种就是 HEAD~n,是基于当前 HEAD 位置的一个相对坐标。
    • HEAD 表示当前分支的最新版本,是比较常用的参数。
    • HEAD^ 表示上一个版本,HEAD^^ 表示上上一个版本。
    • HEAD~HEAD~1 表示上一个版本,以此类推,HEAD^10 为最近第 10 10 10 个版本。
    • HEAD@{2} 表示在 git reflog 日志中标记的提交记录索引。

通过 git loggit reflog 可以查看历史日志,可以看每次提交的唯一编号(hash)。区别是 git reflog 可以查看所有操作的记录(实际是 HEAD 变更记录),包括被撤销回退的提交记录。

$ git reflog -n 10
5acc914 (HEAD -> main) HEAD@{0}: reset: moving to HEAD~
738748b (dev) HEAD@{1}: reset: moving to HEAD~
9312c3e HEAD@{2}: reset: moving to HEAD~
db03fcb HEAD@{3}: reset: moving to HEAD~
1b81fb3 HEAD@{4}: reset: moving to HEAD~
41ea423 HEAD@{5}: reset: moving to HEAD~
d3e15f9 HEAD@{6}: reset: moving to d3e15f9
1b81fb3 HEAD@{7}: reset: moving to HEAD~1
41ea423 HEAD@{8}: reset: moving to HEAD~
d3e15f9 HEAD@{9}: reset: moving to HEAD~

6.比较 diff

git diff 用来比较不同文件版本之间的差异。

指令
描述
git diff查看暂存区和工作区的差异
git diff [file]同上,指定文件
git diff --cached查看已暂存的改动,就是暂存区与新版本 HEAD 进行比较
git diff --staged同上
git diff --cached [file]同上,指定文件
git diff HEAD查看 已暂存的 + 未暂存的 所有改动,就是与最新版本 HEAD 进行比较
git diff HEAD~同上,与上一个版本比较。HEAD~ 表示上一个版本,HEAD~10 为最近第 10 10 10 个版本
git diff [id] [id]查看两次提交之间的差异
git diff [branch]查看工作区和分支直接的差异

☘️ 画个图更清晰些:
在这里插入图片描述

# 查看文件的修改
$ git diff README.md# 查看两次提交的差异
$ git diff 8f4244 1da22# 显示今天你写了多少行代码:工作区+暂存区
$ git diff --shortstat "@{0 day ago}"

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

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

相关文章

nodejs微信小程序-慢性胃炎健康管理系统的设计与实现-安卓-python-PHP-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

爱上C语言:操作符详解(下)

&#x1f680; 作者&#xff1a;阿辉不一般 &#x1f680; 你说呢&#xff1a;生活本来沉闷&#xff0c;但跑起来就有风 &#x1f680; 专栏&#xff1a;爱上C语言 &#x1f680;作图工具&#xff1a;draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话&#xff0c;还请…

【漏洞复现】泛微e-Weaver SQL注入

漏洞描述 泛微e-Weaver&#xff08;FANWEI e-Weaver&#xff09;是一款广泛应用于企业数字化转型领域的集成协同管理平台。作为中国知名的企业级软件解决方案提供商&#xff0c;泛微软件&#xff08;广州&#xff09;股份有限公司开发和推广了e-Weaver平台。 泛微e-Weaver旨在…

CAS源码工程搭建记录

CAS源码工程搭建 1.下载2.gradle下载源改为阿里云&#xff0c;解决下载慢的问题3.解决保存 1.下载 git clone -b 5.3.x https://gitee.com/mirrors/CAS.git如果下载的是压缩包&#xff0c;导入工程会保存&#xff0c;因为builder.gradle的第20行开始有取git信息&#xff0c;如…

wangEditor富文本编辑器使用

一、官网 开源 Web 富文本编辑器&#xff0c;开箱即用&#xff0c;配置简单 二、下载安装 npm install --save wangeditor/editor-for-vue 三、在vue中使用 3.1、抽离组件editor.vue 在工程的components目录下新建组件editor <template><div><Toolbar:edi…

【漏洞复现】通达oa 前台sql注入

漏洞描述 通达OA(Office Automation)是一款企业级协同办公软件,旨在为企业提供高效、便捷、安全、可控的办公环境。它涵盖了企业日常办公所需的各项功能,包括人事管理、财务管理、采购管理、销售管理、库存管理、生产管理、办公自动化等。通达OA支持PC端和移动端使用,可以…

C_12练习题

一、单项选择题(本大题共20小题,每小题2分&#xff0c;共40分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;并将所选项前的字母填写在答题纸的相应位置上。) C 风格的注释&#xff0c;也称块注释或多行注释&#xff0c;以&#xff08;&#xff09;…

比亚迪刀片电池与特斯拉4680电池比较

1 电池材料 比亚迪刀片电池采用的磷酸铁锂LFP&#xff08;LiFePO4&#xff09;&#xff0c;特斯拉的4680电池采用的三元锂。 磷酸铁锂&#xff1a;循环寿命长&#xff0c;安全性能好&#xff0c;价格低廉&#xff0c;但是能量密度低&#xff0c;导电性能差&#xff0c;低温表现…

软件开发、网络空间安全、人工智能三个方向的就业和前景怎么样?哪个方向更值得学习?

软件开发、网络空间安全、人工智能这三个方向都是当前及未来的热门领域&#xff0c;每个领域都有各自的就业前景和价值&#xff0c;以下是对这三个方向的分析&#xff1a; 1、软件开发&#xff1a; 就业前景&#xff1a;随着信息化的加速&#xff0c;软件开发的需求日益增长。…

STM32外部中断(EXTI)与RTOS多任务处理的协同设计

当在STM32上使用外部中断&#xff08;EXTI&#xff09;与RTOS&#xff08;Real-Time Operating System&#xff0c;实时操作系统&#xff09;进行多任务处理时&#xff0c;需要设计合适的协同机制&#xff0c;以确保可靠的中断处理和任务调度。在下面的概述中&#xff0c;我将介…

window系统vscode 编译wvp前端代码

下载代码 wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台&#xff0c;负责实现核心信令与设备管理后台部分&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联&#xff0c;支持rtsp/rtmp等…

【SQL server】 表结构的约束和维护

表结构的约束和维护 修改表结构 (1)添加列 (2)删除列 (3)修改列alter table 表名 add 新列名 数据类型给员工表添加一列邮箱 alter table People add PeopleMail varchar(200)删除列 alter table People drop column PeopleMain修改列 alter table 表名 alter column 列名 数据…