Git使用 从入门到入土 收藏吃灰系列(四) Git工作原理
文章目录
- 一、前言
- 一、Git基本理论(核心)
- 1.1工作区
- 1.2工作流程
一、前言
- 参考安装Git 详细安装教程
- 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多
- 参考视频『Git』知道这些就够了_哔哩哔哩_bilibili,这个精华多,推荐看这个
- 参考视频7小时学会Git 基础全套完整教程(从入门到精通)_哔哩哔哩_bilibili,这个虽然长,但是他偏实践,对小白友好,特别有意思
- 附一个Git动画学习网站
- Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)
讲讲小张的感受:我没有接触过Git
,所以看了很多视频,对于入门使用确实只要知道git clone
,git add
,git commit
,git push
,git merge
,确实也就足够了。但是我很好奇背后的原理,为什么要用git add
到暂存区而不是直接git commit
?很多指令之间为什么要按一定的顺序执行?所以这个系列我以初学的时候,小白的角度从安装到工作原理(有的是我自己的见解,如果感觉不对,欢迎指正),再到实际应用!另外,推荐看一遍第三个参考视频,然后看一下第四个参考视频,对工作原理的讲解和实际应用确实不错!
一、Git基本理论(核心)
1.1工作区
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory) 就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
- Workspace: 工作区,就是你平时存放项目代码的地方
- Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息(.git 隐藏文件)
- Repository: 仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
- Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
暂存区、仓库区不需要管理,通过命令操作即可
本地的三个区域确切的说应该是git仓库中HEAD指向的版本:
- Directory: 使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间
- WorkSpace: 需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间
- .git: 存放Git管理信息的目录,初始化仓库的时候自动创建
- Index/Stage: 暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区
- Local Repo: 本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)
- Stash: 隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态
Q:为什么中间多一个暂存区而不是直接提交到本地仓库?
A:使用git时候大多时候是
git add .
一次性添加所有文件,我们习惯性新做一个功能就提交一次。但是如果做了许多个功能,我们就可以分别添加暂存区,分开提交。这样可以保证提交历史的清晰。否则,想要回滚历史的时候,根本分不清每个版本包含了哪些功能,修复了哪些bug。而暂存区的作用就是为了,可以选择提交,比如你在开发B功能的时候,发现A功能还存在Bug,这时候就需要先修复A中的Bug,然后先提交修复的A中的Bug,然后再提交B功能开发的文件。这样就可以提高提交版本历史记录的清晰,方便回滚。而提交是原子性操作,文件的选择就交于暂存区去做,每一次提交都是一个完整的功能开发,保证commit的干净,降低commit的粒度
1.2工作流程
1.2.1git的工作流程:
1、在工作目录中添加、修改文件;(eg:新建 小张.java)
2、将需要进行版本管理的文件放入暂存区域;(git add 小张.java
提交JAVA程序或者git add .
提交文件目录下所有程序)
3、将暂存区域的文件提交到本地仓库。(git commit
暂存区文件提交到git仓库)
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
下一期介绍如何创建本地仓库
专栏速览:
- Git使用 从入门到入土 收藏吃灰系列(一) 专栏前言
- Git使用 从入门到入土 收藏吃灰系列(二) Git的安装与配置
- Git使用 从入门到入土 收藏吃灰系列(三) Git常用命令
- Git使用 从入门到入土 收藏吃灰系列(四) Git工作原理
- Git使用 从入门到入土 收藏吃灰系列(五) Git本地仓库搭建
- Git使用 从入门到入土 收藏吃灰系列(六) 链接远程仓库
- Git使用 从入门到入土 收藏吃灰系列 (七) 同时配置Gitee、Github 公钥
- Git使用 从入门到入土 收藏吃灰系列 (八) 什么是分支 分支的作用
- Git使用 从入门到入土 收藏吃灰系列 (九) git reset 移除暂存区与版本回退
- Git使用 从入门到入土 收藏吃灰系列 (十) 详谈push、fetch、pull
- Git使用 从入门到入土 收藏吃灰系列 (十一) 下载所有远程仓库分支
- Git使用 从入门到入土 收藏吃灰系列 (十二) git merge 与 git rebase
- Git使用 从入门到入土 收藏吃灰系列 (十三) git stash、git check-pick、git tag、git diff
- Git使用 从入门到入土 收藏吃灰系列 (十四) 清除git仓库的所有提交记录
- Git使用 从入门到入土 收藏吃灰系列 (十五) 自定义Git命令
- Git使用 (十六) Github上的小按钮
- Git使用 (十七) 解决Git Bash中文乱码
Git使用 从入门到入土 收藏吃灰系列(四) Git工作原理相关推荐
- Git使用 从入门到入土 收藏吃灰系列 (九) git reset 移除暂存区与版本回退
文章目录 一.前言 二.Git远程命令实践 2.1git reset 移除暂存区 2.2 git log+git reflog+git reset 版本回退 一.前言 参考安装Git 详细安装教程 参 ...
- Git使用 从入门到入土 收藏吃灰系列(三) Git常用命令
文章目录 一.前言 二.常用的命令 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『Git』知道这些就够了_哔哩哔哩_bilibi ...
- Git使用 从入门到入土 收藏吃灰系列 (十三) git stash、git check-pick、git tag、git diff
文章目录 一.前言 二.git stash 存储到堆栈 三.Git tag 标签 四.git cherry-pick 挑选合并 五.git diff 本节速览 git stash 堆栈 git tag ...
- Git使用 从入门到入土 收藏吃灰系列(六) 链接远程仓库
文章目录 一.前言 二.使用Gitee链接远程仓库(免密登录) 2.1链接仓库 2.2使用指令上传远程仓库 三.利用GitHub连接远程仓库(免密登录) 一.前言 参考安装Git 详细安装教程 参考视 ...
- Git使用 从入门到入土 收藏吃灰系列 (十) 详谈push、fetch、pull
文章目录 一.前言 二.git push上传新的分支 三.git fetch 拉取远程仓库 四.git pull 拉取远程仓库 本节内容速览 二:git push使用 三:git fetch使用.为什 ...
- Git使用 从入门到入土 收藏吃灰系列 (八) 什么是分支 分支的作用
文章目录 一.前言 二.Git分支 2.1什么是分支? 2.2 分支有什么用? 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『G ...
- Git使用 从入门到入土 收藏吃灰系列 (十四) 清除git仓库的所有提交记录
文章目录 一.前言 二.清除git仓库的所有提交记录 本节速览 清除git仓库的所有提交记录 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 ...
- 一个命令让redis服务端所有信息无所遁形~(收藏吃灰系列)
1.info命令作用 在redis客户端执行INFO 命令以便于计算机解析和人工阅读的简单格式返回有关redis服务端的所有信息和统计数据. 可选参数可用于选择特定的信息部分: Server 服务器基 ...
- 最新版Zookeeper常用命令总结(收藏吃灰系列)
1.服务端常用命令 在完成zookeeper的伪集群部署之后(部署教程参考linux上部署最新版本zookeeper伪分布式集群),可在bin目录下执行这些命令 启动ZK服务: bin/zkServe ...
最新文章
- 使用Telnet与ssh协议远程登录linux系统
- bootstrap 获取表格修改的结果_bootstrap-table前端修改后台传来的数据重新进行渲染...
- 软件质量保证与测试——Smoke Test
- JAVA面向对象程序设计(第二版) 袁绍欣 第六章答案
- [J2ME QA]真机报告MontyThread -n的错误之解释
- Android 4.0新增WiFiDirect功能
- virtualbox中Centos6.6和windows共享文件夹设置
- OpenStack精华问答 | OpenStack和CloudStack对比
- 谈谈我对MYSQL乱码的解决办法
- 不染用计算机数字,2013年计算机等级考试一级B知识预测题(6)
- 敏捷开发流程下的测试(一)敏捷测试核心
- 你不知道的Event
- android xml反编译原理,记一次resources.arsc文件hex修改原理分析
- asp.net中获取远端WEB页内容
- 基于正点原子STM32的OLED显示实验
- 超像素分割 SLIC算法 使用示例
- 全网最新抖音视频去水印解析PHP网页源码
- oracle中distance用法,distance的用法总结大全
- 苹果手机批量移动图标的小技巧
- 软件测试及工程常用词汇(笔记一)