文章目录

  • 一、前言
  • 一、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)

#mermaid-svg-60O6YVRD8MmyNUcL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-60O6YVRD8MmyNUcL .error-icon{fill:#552222;}#mermaid-svg-60O6YVRD8MmyNUcL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-60O6YVRD8MmyNUcL .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-60O6YVRD8MmyNUcL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-60O6YVRD8MmyNUcL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-60O6YVRD8MmyNUcL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-60O6YVRD8MmyNUcL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-60O6YVRD8MmyNUcL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-60O6YVRD8MmyNUcL .marker.cross{stroke:#333333;}#mermaid-svg-60O6YVRD8MmyNUcL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-60O6YVRD8MmyNUcL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-60O6YVRD8MmyNUcL .cluster-label text{fill:#333;}#mermaid-svg-60O6YVRD8MmyNUcL .cluster-label span{color:#333;}#mermaid-svg-60O6YVRD8MmyNUcL .label text,#mermaid-svg-60O6YVRD8MmyNUcL span{fill:#333;color:#333;}#mermaid-svg-60O6YVRD8MmyNUcL .node rect,#mermaid-svg-60O6YVRD8MmyNUcL .node circle,#mermaid-svg-60O6YVRD8MmyNUcL .node ellipse,#mermaid-svg-60O6YVRD8MmyNUcL .node polygon,#mermaid-svg-60O6YVRD8MmyNUcL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-60O6YVRD8MmyNUcL .node .label{text-align:center;}#mermaid-svg-60O6YVRD8MmyNUcL .node.clickable{cursor:pointer;}#mermaid-svg-60O6YVRD8MmyNUcL .arrowheadPath{fill:#333333;}#mermaid-svg-60O6YVRD8MmyNUcL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-60O6YVRD8MmyNUcL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-60O6YVRD8MmyNUcL .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-60O6YVRD8MmyNUcL .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-60O6YVRD8MmyNUcL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-60O6YVRD8MmyNUcL .cluster text{fill:#333;}#mermaid-svg-60O6YVRD8MmyNUcL .cluster span{color:#333;}#mermaid-svg-60O6YVRD8MmyNUcL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-60O6YVRD8MmyNUcL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

git add 小张.java
git commit
git push
新建小张.java
暂存区
本地仓库
远程

下一期介绍如何创建本地仓库

专栏速览:

  1. Git使用 从入门到入土 收藏吃灰系列(一) 专栏前言
  2. Git使用 从入门到入土 收藏吃灰系列(二) Git的安装与配置
  3. Git使用 从入门到入土 收藏吃灰系列(三) Git常用命令
  4. Git使用 从入门到入土 收藏吃灰系列(四) Git工作原理
  5. Git使用 从入门到入土 收藏吃灰系列(五) Git本地仓库搭建
  6. Git使用 从入门到入土 收藏吃灰系列(六) 链接远程仓库
  7. Git使用 从入门到入土 收藏吃灰系列 (七) 同时配置Gitee、Github 公钥
  8. Git使用 从入门到入土 收藏吃灰系列 (八) 什么是分支 分支的作用
  9. Git使用 从入门到入土 收藏吃灰系列 (九) git reset 移除暂存区与版本回退
  10. Git使用 从入门到入土 收藏吃灰系列 (十) 详谈push、fetch、pull
  11. Git使用 从入门到入土 收藏吃灰系列 (十一) 下载所有远程仓库分支
  12. Git使用 从入门到入土 收藏吃灰系列 (十二) git merge 与 git rebase
  13. Git使用 从入门到入土 收藏吃灰系列 (十三) git stash、git check-pick、git tag、git diff
  14. Git使用 从入门到入土 收藏吃灰系列 (十四) 清除git仓库的所有提交记录
  15. Git使用 从入门到入土 收藏吃灰系列 (十五) 自定义Git命令
  16. Git使用 (十六) Github上的小按钮
  17. Git使用 (十七) 解决Git Bash中文乱码

Git使用 从入门到入土 收藏吃灰系列(四) Git工作原理相关推荐

  1. Git使用 从入门到入土 收藏吃灰系列 (九) git reset 移除暂存区与版本回退

    文章目录 一.前言 二.Git远程命令实践 2.1git reset 移除暂存区 2.2 git log+git reflog+git reset 版本回退 一.前言 参考安装Git 详细安装教程 参 ...

  2. Git使用 从入门到入土 收藏吃灰系列(三) Git常用命令

    文章目录 一.前言 二.常用的命令 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『Git』知道这些就够了_哔哩哔哩_bilibi ...

  3. Git使用 从入门到入土 收藏吃灰系列 (十三) git stash、git check-pick、git tag、git diff

    文章目录 一.前言 二.git stash 存储到堆栈 三.Git tag 标签 四.git cherry-pick 挑选合并 五.git diff 本节速览 git stash 堆栈 git tag ...

  4. Git使用 从入门到入土 收藏吃灰系列(六) 链接远程仓库

    文章目录 一.前言 二.使用Gitee链接远程仓库(免密登录) 2.1链接仓库 2.2使用指令上传远程仓库 三.利用GitHub连接远程仓库(免密登录) 一.前言 参考安装Git 详细安装教程 参考视 ...

  5. Git使用 从入门到入土 收藏吃灰系列 (十) 详谈push、fetch、pull

    文章目录 一.前言 二.git push上传新的分支 三.git fetch 拉取远程仓库 四.git pull 拉取远程仓库 本节内容速览 二:git push使用 三:git fetch使用.为什 ...

  6. Git使用 从入门到入土 收藏吃灰系列 (八) 什么是分支 分支的作用

    文章目录 一.前言 二.Git分支 2.1什么是分支? 2.2 分支有什么用? 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『G ...

  7. Git使用 从入门到入土 收藏吃灰系列 (十四) 清除git仓库的所有提交记录

    文章目录 一.前言 二.清除git仓库的所有提交记录 本节速览 清除git仓库的所有提交记录 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 ...

  8. 一个命令让redis服务端所有信息无所遁形~(收藏吃灰系列)

    1.info命令作用 在redis客户端执行INFO 命令以便于计算机解析和人工阅读的简单格式返回有关redis服务端的所有信息和统计数据. 可选参数可用于选择特定的信息部分: Server 服务器基 ...

  9. 最新版Zookeeper常用命令总结(收藏吃灰系列)

    1.服务端常用命令 在完成zookeeper的伪集群部署之后(部署教程参考linux上部署最新版本zookeeper伪分布式集群),可在bin目录下执行这些命令 启动ZK服务: bin/zkServe ...

最新文章

  1. 使用Telnet与ssh协议远程登录linux系统
  2. bootstrap 获取表格修改的结果_bootstrap-table前端修改后台传来的数据重新进行渲染...
  3. 软件质量保证与测试——Smoke Test
  4. JAVA面向对象程序设计(第二版) 袁绍欣 第六章答案
  5. [J2ME QA]真机报告MontyThread -n的错误之解释
  6. Android 4.0新增WiFiDirect功能
  7. virtualbox中Centos6.6和windows共享文件夹设置
  8. OpenStack精华问答 | OpenStack和CloudStack对比
  9. 谈谈我对MYSQL乱码的解决办法
  10. 不染用计算机数字,2013年计算机等级考试一级B知识预测题(6)
  11. 敏捷开发流程下的测试(一)敏捷测试核心
  12. 你不知道的Event
  13. android xml反编译原理,记一次resources.arsc文件hex修改原理分析
  14. asp.net中获取远端WEB页内容
  15. 基于正点原子STM32的OLED显示实验
  16. 超像素分割 SLIC算法 使用示例
  17. 全网最新抖音视频去水印解析PHP网页源码
  18. oracle中distance用法,distance的用法总结大全
  19. 苹果手机批量移动图标的小技巧
  20. 软件测试及工程常用词汇(笔记一)

热门文章

  1. 数仓-用户行为数据-埋点数据日志结构
  2. 3Dgame_homework8
  3. 哈罗顺风车送到终点吗_哈啰顺风车司机:把乘客送到指定地点,订单结束后看到评价却愣了...
  4. 有源RFID技术部署,需考虑哪些因素?
  5. 基于双闭环PID控制器的永磁同步电机控制系统仿真
  6. chrom调试工具使用
  7. [译] 用ps创建error水晶小图标
  8. 推特如何设置隐私内容保护
  9. 收藏:近期已上线或即将上线的热门手游盘点,射击魔幻角色扮演?总有一款适合你
  10. 独立产品灵感周刊 DecoHack #010