Git笔记(三)

学git还是直接看官方文档比较靠谱

官方文档的链接在这:https://git-scm.com/docs

大致来介绍一下:

git 一共有四种区

workspace(工作区)

index/staging area(暂存区)

local repository(本地快照区)

remote repository(远程仓库)

首先,工作区就是本地代码目录,随便新建一个文件夹,之后你想在这个文件夹下创建git,这个文件夹就叫工作区

暂存区,这个顾名思义,就是将你即将提交的代码暂存起来的区域,最终暂存的代码会作为一次“快照”来输出,查看暂存区可以使用git ls-files --stage 命令

本地快照区,关于这个区的名字其实很多网上的资料都不一样,git官方文档也没有固定下名字(我找了几遍,暂未发现),但是,这个区的作用是用来存放快照,这是毋庸置疑的。

remote repository,远端仓库,指网络上保存好的分支以及文件,一般通过push命令来将本地的代码同步到网上,代码到了这里说明提交完成了

接下来用一张图来概括4种区之间的联系和工作模式
img

就像我之前的笔记的例子:

我本地建立了一个123.txt的记事本,之后,使用add命令将其添加到了暂存区,又使用了commit命令将其变成了一份快照放进了本地快照区,之后用push将其推上了网络上的远程仓库中

这一系列操作对应了图上的下面三根线

你已经明白了一些内在的联系了,但是还不够,接下来讲解更为底层的知识:

在暂存时(add操作时),git会为每一个文件计算校验和,使用的是SHA-1哈希算法,这个checksum也会作为后续很多操作的指针。之后,把文件包成blob对象,将校验和加入暂存区等待commit

关于blob对象:几乎可以等价为源码的二进制

在进行commit操作时,Git 会保存一个提交对象(commit object)。 该提交对象会包含一个指向暂存内容快照的指针,包含了作者的姓名和邮箱、提交时输入的信息(commit -m后你输入的信息)以及指向它的父对象的指针。 首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象, 而由多个分支合并产生的提交对象有多个父对象

首次提交对象及其树结构。
上方描述了一个“commit”之后存放的结点构造:

commit对象,树对象,blob对象

commit对象中存放着指向树对象的指针,本身的校验和,作者和一些其他的信息

树对象中存放的是所有blob对象的指针

而blob对象存放的是源码的二进制

至此一个完整的commit命令就操作完了,这次commit出现了的commit结点就是98ca9

所谓的快照,也可以指commit对象,树对象,blob对象三合一抽象的某种概念

理解了这个之后,就可以更好地理解HEAD,MASTER,ORIGIN等概念了

一般来说,commit之后,git 的head指针也会重新指向新commit的commit结点,head永远指向是“当前”分支

我们使用checkout等命令切换分支时,本质是让head指针指向了不同的分支名称,也是上文所说的“commit结点校验和”

当我们拉下代码,push后,查看git日志时,上方总是会出现一些异色的分支名称,大致是:

head->master, origin/master, origin/head

这里一共出现了4种指针

首先,head就是一个指针,永远指向当前分支,能够让你的“工作区”出现不同时期的代码

master指针是本地代码的分支指针,是默认创建的,一般也会跟随commit来进行移动

origin/master,和origin/head是远端仓库的指针

就像本地有一个暂存快照区,里面保存着一堆commit结点树一样,远端也有一个暂存快照区,里面也有着结点树

这个远端就是被简化写成的origin

这两个结点,origin/head就像本地的head指针一样,它负责显现结点树中该展示的结点

origin/master是一个远端分支,这个是git系列的默认分支名称,如果项目有多种版本,例如穿刺,调试,开发版本号等,都会修改分支名称

远端分支几乎无法通过本地修改,例如checkout怎么都无法变更远端分支,它的移动非常麻烦,我记得曾经做过一个企鹅的项目,远端分支和本地老是冲突,查了很多资料最后是用强制删除结点的方式将远端分支的结点移动

所以,要规划好分支

这一篇大概就介绍到这吧,本文很多理解都引用于官方文档,需要的小伙伴多去看看官方文档

参考的链接:
https://blog.csdn.net/weixin_65775770/article/details/135421020?ops_request_misc=%257B%2522request%255Fid%2522%253A%252225ce3743d63cf2ad8d20a4e63f066e53%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=25ce3743d63cf2ad8d20a4e63f066e53&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-135421020-null-null.142v102pc_search_result_base1&utm_term=git%E5%B7%A5%E4%BD%9C%E5%8C%BA%E5%92%8C%E6%9A%82%E5%AD%98%E5%8C%BA%E5%9B%BE%E8%A7%A3&spm=1018.2226.3001.4187
https://git-scm.com/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%88%86%e6%94%af%e7%ae%80%e4%bb%8b

### 关于Git使用的Markdown格式笔记或模板 在创建有关Git使用的Markdown笔记时,可以遵循一定的结构来确保清晰性和易读性。下面是一个基于最佳实践构建的示例模板: #### 1. 文档标题 # Git 基础操作指南 #### 2. 版本控制简介 版本控制系统允许团队成员协作开发项目而不必担心文件冲突。Git 是最流行的分布式版本控制系统之一。 #### 3. 安装与配置 安装完成后需设置用户名和邮箱以便追踪贡献者身份。 ```bash git config --global user.name "Your Name" git config --global user.email you@example.com ``` 为了简化后续的身份验证过程,可以通过存储凭证辅助器来保存登录信息[^1]: ```bash git config --global credential.helper store ``` #### 4. 创建仓库 初始化新仓库或将现有目录转换为Git库: ```bash cd /path/to/my_project git init ``` 克隆远程仓库到本地机器上: ```bash git clone https://github.com/user/repo.git ``` #### 5. 日常工作流 添加更改至暂存区并提交更新: ```bash git add . git commit -m "描述性的消息" ``` 查看当前分支状态以及最近一次提交的信息: ```bash git status git log --oneline ``` 推送本地改动到远端服务器: ```bash git push origin main ``` 拉取最新的上游变更并与本地同步: ```bash git pull origin main ``` #### 6. 分支管理 创建新的特性分支用于隔离功能开发: ```bash git checkout -b feature_branch_name ``` 切换回主干继续其他任务: ```bash git checkout main ``` 合并已完成的功能回到主线之前先确保已经获取最新版main分支的内容: ```bash git merge feature_branch_name ``` 删除不再需要的工作副本: ```bash git branch -d feature_branch_name ``` #### 7. 解决冲突 当多人编辑同一部分代码时可能会发生冲突,在这种情况下需要手动调整直至解决所有分歧之处再完成合并流程。 #### 8. 标签打点 给特定版本打标签有助于标记重要里程碑如发布日期等特殊时刻: ```bash git tag v1.0.0 git push origin --tags ``` 此模板不仅涵盖了基本概念还包含了实际应用场景下的常用指令集,非常适合初学者作为入门参考资料使用。通过这种方式整理出来的笔记既直观又实用,能够帮助读者快速掌握Git的核心技能[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值