目录
一、分区及工作流程
1. Git分区
2. 工作流程
二、本地仓库初始化
1. git init
2. .git/目录简单介绍
三、用户信息配置
1. 用户名和邮箱配置介绍
2.使用git config配置用户信息
四、管理暂存区文件
1. Git文件状态
2. 添加文件到暂存区
3. 删除暂存区的文件
4. 文件修改管理
五、提交文件到本地仓库
六、推送到远程仓库
1. 创建远程仓库
2. 添加远程仓库地址
3. 查看远程仓库地址
4. 删除远程仓库地址
5. 推送到远程仓库
https上传
ssh上传
七、从远程仓库clone、fetch或pull
1. 克隆远程仓库到本地
2. 获取远程仓库(fetch)
3. 拉取远程仓库(pull)
首页 开发工具 git 深入分析Git基本工作原理

深入分析Git基本工作原理

Apr 07, 2022 pm 01:30 PM
git

本篇文章给大家带来了关于Git的相关知识,其中主要介绍了git的基本工作原理,入门级教程,通过玩转Git本地仓库,帮助新手快速入手Git,希望对大家有帮助。

深入分析Git基本工作原理

推荐学习:《Git学习教程

一、分区及工作流程

1. Git分区

Git的分区包括工作区、暂存区、本地仓库(本地版本库)、远程仓库(远程版本库)。

  1. 工作区
    工作区(Workspace)即本地代码所在的目录,同时也是存放 .git/ (本地仓库)的目录。

  2. 暂存区
    暂存区(Index/Stage)是工作区和本地仓库的缓存空间,里面记录着即将提交给本地仓库(版本库)的文件修改信息,.git/ 目录里的index文件就是暂存区。

  3. 本地仓库
    本地仓库(Repository)也称本地库或版本库,存放了本地的所有版本(commit提交记录),本地仓库的文件都在 .git/ 目录中。

  4. 远程仓库
    远程仓库(Remote)在网络上,GitHub、Gitee和GitLab都能创建远程仓库,和本地仓库一样,远程仓库存放的也是不同的代码版本,只是这些版本可以来自多个本地仓库。

2. 工作流程

------------------------------------------------------下图来源网络---------------------------------------------------------
在这里插入图片描述

上图生动地描述了Git不同分区之间的操作命令。

  • 假如要实现上传代码功能,工作区使用add添加文件到暂存区,暂存区再通过commit提交版本给本地仓库,最后本地仓库使用push将版本推送到远程仓库;
  • 工作区修改的文件可以通过checkout命令从本地仓库或暂存区恢复;如果要将工作区某分支的代码更新为远程仓库最新版本,可以使用pull命令;
  • 对远程仓库使用clone可以将远程仓库主分支拷贝到本地仓库,fetch命令与pull类似,只是pull会合并本地代码,而fetch只会把最新版本抓取到本地版本库,不考虑本地仓库是否有新增。

二、本地仓库初始化

1. git init

本地仓库(版本库)需要使用 git init 命令来创建(也可以直接从远程仓库克隆,后面介绍)。
进入工作区(代码存放目录),输入git init,git会在工作区新建一个.git/目录:
在这里插入图片描述

2. .git/目录简单介绍

在这里插入图片描述
在一个新建的.git/目录中,有3个文本文件:

  • config存放了本地仓库的配置信息;
  • description用来描述仓库的名字;
  • HEAD为本地仓库当前分支,默认为master,指向了refs/heads/master,可见refs/目录主要存放一些分支信息;

后面在对本地仓库进行操作时,还会产生其他文件,比如logs/——保存提交的记录,index——暂存区。

【注意】 千万不要手动更改.git/里的文件,可能会破坏本地仓库的结构,造成不良后果。

三、用户信息配置

1. 用户名和邮箱配置介绍

初始化本地仓库后的第一件事情就是给本地仓库添加用户配置信息,包括用户名和邮箱地址,这里的用户名和邮箱地址和托管平台(如gitee)的账户没有直接关系,它唯一的作用就是让别的用户或托管平台知道代码的上传者信息,邮箱乱填也不会导致不能上传代码。

比如下面我用“张三”和“李四”上传了代码,邮箱地址不是真实存在的,同样可以上传成功:(commit信息出了点意外)
在这里插入图片描述
李四的邮箱地址显然不是真实的。
在这里插入图片描述
由于“张三”和“李四”的邮箱没有在gitee绑定账户,所以点击它们头像时,不会显示用户信息,如果用户配置里填写了gitee账号的提交邮箱,则可以在gitee上查看上传者账号信息。
在这里插入图片描述
gitee用户的提交邮箱,可以在gitee->个人主页->个人设置->邮箱管理中设置和查看:
在这里插入图片描述

2.使用git config配置用户信息

讲了那么多用户名和邮箱的注意事项,其实用户信息配置十分简单:

git config --global user.name "your name"git config --global user.email "your email"
登录后复制

user.name 后接用户名,任意填写。
user.email 后接用户邮箱,任意填写。
–global 为配置全局属性
在这里插入图片描述
提交代码到本地仓库时,git会先检索本地仓库的.git/config文件,如果没有user的信息,则使用全局的配置文件(符合就近原则)。

全局配置文件存放位置为 系统用户目录/用户名/.gitconfig,里面只有user属性。
在这里插入图片描述

不加–global时,仅设置本地仓库的用户配置,本地仓库用户配置信息存放位置:.git/config
在这里插入图片描述
上图我仅设置了本地配置的用户名,此时如果提交修改到本地仓库,提交记录(下图)中用户名使用本地配置,因为本地没有配置用户邮箱,所以邮箱依然使用全局配置中指定的邮箱。
在这里插入图片描述

四、管理暂存区文件

配置完用户信息后,我们就可以开始考虑提交代码了,但是有时候,我们并不想把整个工作区的文件都提交到本地仓库(版本库)。暂存区(index/stage)的存在,替我们解决了这个困扰,我们可以先把代码文件添加到暂存区,如果觉得还需要改动,可以将文件从暂存区删除,直到我们觉得文件选择得差不多了,再进行下一步(提交到本地仓库)。

1. Git文件状态

在管理暂存区之前,我们还需要了解工作区文件的几种状态:

  • Untracked 未跟踪,工作区中没有加入过暂存区的文件,不参与版本控制;
  • Unmodified 未修改,加入版本控制,但和版本库中文件快照相同;
  • Modified 已修改,加入版本控制,而且和上次加入版本库时的快照不同;
  • Staged 已暂存,下一步可以提交到本地仓库(版本库)。

------------------------------------------------------下图来源网络---------------------------------------------------------
在这里插入图片描述
git status命令可以用来查看工作区文件当前的状态:

#查看特定文件的状态
git status [filename]#查看所有文件状态
git status

#精简的方式显示文件状态
git status -s
登录后复制

2. 添加文件到暂存区

先查看工作区所有文件的状态,发现还没有任何文件:
在这里插入图片描述

现在创建3个文件,再次使用git status(-s表示精简显示),3个文件的状态为Untracked,??为精简显示下Untracked的标志,意思是新创的文件没有被本地仓库(版本库)跟踪。
在这里插入图片描述
git add [文件…] 可以添加一个或多个文件到暂存区,使文件状态变为Staged,A表示该文件被add到暂存区。
在这里插入图片描述
也可以使用 git add . 或 git add -A 将工作区所有文件添加到暂存库(除了.gitignore里声明的文件,本文暂不介绍)。
在这里插入图片描述

3. 删除暂存区的文件

既然可以向暂存区添加文件,那么反向操作必然也不能少,git rm --cached [文件…] 命令可以将暂存区的文件移除,使其恢复到Untracked状态。
在这里插入图片描述

4. 文件修改管理

如果已经存入暂存区,但在文件提交到本地仓库前,我们对其进行了修改,那么它的状态将变为Modified。
在这里插入图片描述
对于Modified状态的文件,我们可以使用git add将修改后的版本加入到暂存区,也可以使用git checkout -- [file...]将工作区的该文件恢复到暂存区的版本。

git add a.c重新添加a.c到暂存区:
在这里插入图片描述
下图为使用git checkout -- a.c从暂存区恢复a.c文件,下图中我没有加 “ --”,它的作用是让checkout不检测任何其他选项参数,目的是防止该命令把a.c当做一个分支(checkout 还有一个作用是切换分支)。
在这里插入图片描述
对Modified状态下的文件使用 git diff 可以得出文件修改的详细记录,git diff和diff命令虽然作用都是对比文件,但git diff的作用是对比不同的状态下的同一文件,而diff用来对比两个不同的文件。
在这里插入图片描述

五、提交文件到本地仓库

文件添加到暂存区的目的就是将其提交到本地仓库(版本库),提交命令为git commit -m “message”

我们可以在commit 后面添加文件,这样能指定提交的文件:
在这里插入图片描述
通过git log 可以查看提交记录,HEAD为本地仓库当前分支,指向主分支master:
在这里插入图片描述
直接使用 git commit -m “message” 可以将整个暂存区都提交到本地仓库:

在这里插入图片描述

#以一行的形式显示所有提交版本:
git log --pretty=oneline
登录后复制

在这里插入图片描述

#一行显示,只显示哈希值的前7位:
git log --oneline
登录后复制

在这里插入图片描述

#显示历史提交版本与当前版本的间隔数:
git reflog
登录后复制

在这里插入图片描述

六、推送到远程仓库

代码文件提交到本地仓库后,还需要推送到远程仓库进行托管。

1. 创建远程仓库

我以码云为例,远程仓库的创建可以通过以下三步实现:
在这里插入图片描述

2. 添加远程仓库地址

git remote add 命令可以添加远程仓库,name为远程仓库地址的别名,自定义,url为仓库网络地址。
如果要用https的方式上传代码,需要添加远程仓库https地址;用ssh上传代码,则url填远程仓库ssh地址。

先从码云仓库主页将仓库地址复制下来:
在这里插入图片描述

我将远程仓库的本地别名命名为origin:
在这里插入图片描述
远程仓库可以设置多个,只要本地别名不冲突即可。

3. 查看远程仓库地址

git remote -v 命令可以查看远程仓库地址,也可以通过git config -l查看
在这里插入图片描述

4. 删除远程仓库地址

git remote remove 可以删除本地别名为name的远程地址:
在这里插入图片描述

5. 推送到远程仓库

首先确认远程仓库的别名,我当前设置的远程仓库https协议地址对应的别名为https,ssh协议地址对应的别名为ssh,这两个地址其实是一个仓库,只是协议不同。
在这里插入图片描述

https上传

git push name可以实现本地仓库的上传,name为远程仓库在配置文件中的别名,使用https上传,需要输入账号和密码才能完成上传,Window系统会自动保存账号和密码,如果想修改Window已经保存的用户名和密码,可以参考修改Gitee登录凭据。
有时第一次上传会出现不成功的情况,可以尝试使用git push -u name master,该命令的作用是将 name 仓库的主分支作为上流分支,-u和–set-upstream作用相同。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ssh上传

如果要使用ssh上传,需要先生成SSH密匙,并将公匙保存到gitee个人设置的SSH公匙设置中,具体过程可以参考:生成SSH密匙,实现代码上传
有时第一次上传会出现不成功的情况,可以尝试使用git push -u name master,该命令的作用是将 name 仓库的主分支作为上流分支,-u和–set-upstream作用相同。
在这里插入图片描述
在这里插入图片描述

七、从远程仓库clone、fetch或pull

1. 克隆远程仓库到本地

git的克隆可以将远程仓库拷贝到本地,同时自动进行本地仓库的初始化。
在任意目录下打开Git bash,输入 git clone [

],repo为远程仓库网址,dir为克隆仓库的存放路径(可以不用提前创建),如果不填,则默认为远程仓库名(不是本地别名)。
[注意]:clone和push一样需要密码。
在这里插入图片描述
克隆成功,进入该仓库目录,和上传时的工作区一模一样,提交日志也相同。
在这里插入图片描述

2. 获取远程仓库(fetch)

git fetch的作用是将远程仓库的分支拷贝到本地仓库,并把最新版本保存在FETCH_HEAD分支,获取远程仓库分支后,还需手动将其合并到当前分支。
命令格式: git fetch [] ,repository为远程仓库的网络地址。
git merge <分支名>用来合并分支
在这里插入图片描述

3. 拉取远程仓库(pull)

git pull和git fetch类似,但git pull会自动将远程仓库的分支合并到本地的当前分支。
在这里插入图片描述

推荐学习:《Git视频教程

以上是深入分析Git基本工作原理的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

git怎么下载项目到本地 git怎么下载项目到本地 Apr 17, 2025 pm 04:36 PM

要通过 Git 下载项目到本地,请按以下步骤操作:安装 Git。导航到项目目录。使用以下命令克隆远程存储库:git clone https://github.com/username/repository-name.git

git怎么更新代码 git怎么更新代码 Apr 17, 2025 pm 04:45 PM

更新 git 代码的步骤:检出代码:git clone https://github.com/username/repo.git获取最新更改:git fetch合并更改:git merge origin/master推送更改(可选):git push origin master

git commit怎么用 git commit怎么用 Apr 17, 2025 pm 03:57 PM

Git Commit 是一种命令,将文件变更记录到 Git 存储库中,以保存项目当前状态的快照。使用方法如下:添加变更到暂存区域编写简洁且信息丰富的提交消息保存并退出提交消息以完成提交可选:为提交添加签名使用 git log 查看提交内容

git下载不动怎么办 git下载不动怎么办 Apr 17, 2025 pm 04:54 PM

解决 Git 下载速度慢时可采取以下步骤:检查网络连接,尝试切换连接方式。优化 Git 配置:增加 POST 缓冲区大小(git config --global http.postBuffer 524288000)、降低低速限制(git config --global http.lowSpeedLimit 1000)。使用 Git 代理(如 git-proxy 或 git-lfs-proxy)。尝试使用不同的 Git 客户端(如 Sourcetree 或 Github Desktop)。检查防火

git怎么删除仓库 git怎么删除仓库 Apr 17, 2025 pm 04:03 PM

要删除 Git 仓库,请执行以下步骤:确认要删除的仓库。本地删除仓库:使用 rm -rf 命令删除其文件夹。远程删除仓库:导航到仓库设置,找到“删除仓库”选项,确认操作。

git怎么合并代码 git怎么合并代码 Apr 17, 2025 pm 04:39 PM

Git 代码合并过程:拉取最新更改以避免冲突。切换到要合并的分支。发起合并,指定要合并的分支。解决合并冲突(如有)。暂存和提交合并,提供提交消息。

如何解决PHP项目中的高效搜索问题?Typesense助你实现! 如何解决PHP项目中的高效搜索问题?Typesense助你实现! Apr 17, 2025 pm 08:15 PM

在开发一个电商网站时,我遇到了一个棘手的问题:如何在大量商品数据中实现高效的搜索功能?传统的数据库搜索效率低下,用户体验不佳。经过一番研究,我发现了Typesense这个搜索引擎,并通过其官方PHP客户端typesense/typesense-php解决了这个问题,大大提升了搜索性能。

git怎么更新本地代码 git怎么更新本地代码 Apr 17, 2025 pm 04:48 PM

如何更新本地 Git 代码?用 git fetch 从远程仓库拉取最新更改。用 git merge origin/&lt;远程分支名称&gt; 将远程变更合并到本地分支。解决因合并产生的冲突。用 git commit -m "Merge branch &lt;远程分支名称&gt;" 提交合并更改,应用更新。

See all articles