文章目录
原创声明
本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!
前言
我们每天上班都要用到 Git,每次我们都输入那几个常用的命令,但是你知道这些命令到底执行了什么操作吗?下面我结合官方的文档和我自己的理解,和大家解释下每个命令到底执行了什么操作。
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!
一、Git 简单介绍
-
Git 采用 【分布式管理系统】:将仓库里面的所有文件都镜像到本地,可以极大防止服务器的磁盘坏了导致代码丢失,还可以便捷进行分支开发
-
每次提交(
commit
)的时候,都是将修改的文件保存为一个快照并保存这个快照的索引。
-
Git 操作全程都是本地化,不需要担心网络不通不能保存副本;
-
Git 有文件校验,在储存前都会对文件计算 SHA-1 散列 校验和,以校验和来进行引用。因为有校验和的存在,所以无需担心文件在传输过程中损坏。
二、解开 Git 在日常上班操作中的神秘面纱
该教程使用的 Git 版本为 V2.28.0.windows.1
2.1 初始化仓库
git init
- 每个新建的仓库,都要上来无脑输入一个
git init
。在git
操作界面输入git init
创建 git 所需要用到的文件
- 输入指令之后可以看到项目文件夹下面有
.git
文件夹生成,这个文件夹里面几乎包含了所有 Git 储存和操作的东西;如果你想备份一个项目,直接复制这个文件即可。
- 打开
.git
文件夹,我们可以看到如下文件树: - 注意:Git的版本不同,文件结构也会不同。
- 各个文件及目录含义如下
文件/目录 名 | 作用 |
---|---|
hooks | 包含客户端或服务端的钩子脚本(hook scripts) |
info | 包含一个全局性排除(global exclude)文件 , 用以放置那些不希望被记录在 .gitignore文件中的忽略模式(ignored patterns) |
objects | Git 的核心组成部分,存储所有数据内容 |
refs | Git 的核心组成部分,存储指向数据(分支、远程仓库和标签等)的提交对象的指针 |
config | 包含项目特有的配置选项 |
description | 仅供 GitWeb 程序使用,我们无需关心 |
HEAD | Git 的核心组成部分,指向目前被检出的分支 |
index (尚未创建) | 保存暂存区信息 |
2.2 第n次提交
git add xxx
- 我们创建了一个仓库,并对仓库进行初始化之后,我们下一步要对文件进行跟踪。我们可以通过
git add
来指定需要跟踪的文件; - 我在文件夹下创建了一个新的文件
README.txt
- 我们使用命令对其进行跟踪
- 执行之后,可以看到
.git
里面多了index
文件
- 打开可以看到暂存区(index)区的文件
git status
- 使用
git status
命令查看哪些文件处于什么状态:
- 这里显示有一个新的文件
README.txt
,正是我刚刚加入的新文件,并且可以看到已被 Git 追踪 - 如何看是否被追踪,只要看
Changes to be committed
下面显示的文件即可,在其下面的文件都是已经暂存的状态了
git commit -m “xxx”
我们将这次需要提交的文件使用 add
进行暂存之后,我们可以提交了,使用命令提交:
-
我们可以看到
commit
之后会有个结果反馈:当前的分支名(master
),本次提交的完整SHA-1
校验和是什么(8db4232
),以及在本次提交中,有多少文件修订过,多少行添加和删改过
-
在
.git
目录下可以看到多了COMMIT_EDITMSG
文件 和logs
目录
-
打开
COMMIT_EDITMSG
文件可以看到是我刚刚时候加上的消息
-
在
refs
文件中,可以看到当前分支(master
)
-
并且可以看到目前该分支中已经提交的最新文件的完整
SHA-1
校验和,这里的是分支master
的一个Git 引用
-
其对应
objects
中的对应文件,这里是 Git 进行存储的内容,每一次commit
都会进行一次存储
- 并且在
logs
目录中进行记录
2.3 分支
2.3.1 创建分支 git branch xxx
-
首先查看目前分支情况
-
可以看到目前只有一个分支
master
-
创建一个
dev
的分支,并查看,可以看到成功创建dev
分支
- 可以在
.git/refs
目录中看到多出了一个新的文件dev
- 打开
dev
文件可以看到创建该分支的最新文件的引用 SHA-1 校验和
- 打开文件
.git/HEAD
,可以看到目前的引用分支名(master
)
2.3.2 切换分支 git checkout
- 在命令行进行分支的切换,并使用
git branch
检查当前所在分支:
- 切换成功之后,打开文件
.git/HEAD
可以看到里面的引用文件变成了dev
2.3.3 分支中提交
新建一个文件 SecondFile.txt
,并且加入版本管理,并进行提交
- 可以在
.git/logs/refs/heads/dev
中看到 上次提交的校验和、本次提交的校验和、提交人、邮箱、时间等信息
总结
这篇文章通过从底层 .git
目录里面的文件变化,来对我们平常上班时候使用到的 Git 命令进行了解释,能够让大家对 Git 命令的操作有个更加深入的理解。
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!
参考资料
授权须知
- 原创文章在推送两天后才可进行转载
- 转载文章,禁止声明原创
- 不允许直接二次转载,转载请根据原文链接联系作者
- 若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。
作者:HinGwenWoong
一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
CSDN: HinGwenWoong
原文链接:Git | 面试官问 Git 原理你可以回答得出来吗?
- 若需要修改文章的排版,请根据原文链接联系作者
- 再次感谢您的认可,转载请遵守如上转载须知!