Day9|工作区、暂存区、储存库,以及各执行的档案状态

前几篇章节经常提到使用 git add 加至暂存区,git commit 提交到储存库。这些工作区、暂存区、储存库,分别代表什麽意思呢?让我们一个一个好好认识,也就会对 Git 有更深的认识罗!

https://ithelp.ithome.com.tw/upload/images/20210923/20141010jzGpvpFK9W.png

Git 中档案存放区域:

  1. 工作区( Working Directory )- 直接编辑的地方,在桌机上肉眼可见,可直接操作档案。
  2. 暂存区域 ( Staging Area )- 数据暂时存放的区域,介於工作区与储存库之间。
  3. 储存库 ( Repository )- 存放已经提交的数据。

Git 中档案会有的状态显示:

  1. 未追踪(Untracked files)- 在刚新加入的档案,或是版本提交後又新建立的档案,这些都还没有被 Git 版本控管
  2. 已更改(Changes not staged for commit) - 已提交版本後,档案又再次被修改,那麽原本的档案会再被丢回工作目录( Working Directory )
  3. 等待提交(Changes to be committed) - 在工作目录里的档案,在执行 git add 指令後,会从工作目录中将档案加至暂存区 ( Staging Area ),这时的状态变为「等待提交」。
  4. 已提交(Committed) - 暂存区里的档案执行 git commit 指令後,档案会从暂存区移动到储存库 ( Repository ),此时的状态为「已提交」。

1. 工作区 (Working Directory )

git status 档案状态 —> 未追踪 (Untracked files)已更改 (Changes not staged for commit)

💡 工作目录:关於 Git 相关的操作,都会在这个目录下完成

假设今天有个要准备开发的专案,我们会建立一个目录,而在这个目录下进行动作,例如:新增档案、删除档案、修改档案、重新命名档案...等编辑动作,都会是在此工作目录下完成。

在後续 Git 里也会介绍到分支( Branch ),此时工作目录很有可能会在各种不同分支之间切换,执行不同的指令,因此保持工作目录的乾净,是版本控管过程中的一个基本原则,有助於往後如果要进行合并时更加简洁。

2. 暂存区域 ( Staging Area )

git status 档案状态 —> 等待提交(Changes to be committed)new file 状态

我们建立新的档案,或是更改档案时,都会执行 git add指令将档案加至暂存区(Staging Area),那麽暂存区是什麽呢?

💡 暂存区:也常被称作索引(index),通常放在 Git 的目录下,储存关於下次提交的资讯。

目的|

纪录「有哪些档案即将要被提交到下一个 commit 版本中」。也就是说,当我们要提交一个版本到储存库前,需要先更新索引状态,有变更才能提交成功。

好处|

拥有暂存区,可以赋予 Git 更多操作上的弹性与灵活性。在 Commit 提交之前我们都可以针对不同状况去操作不同指令来控制档案。

例如:

  1. 修改了三个档案,其中一个不想提交,如何操作?
  2. 原先修改的档案想放弃,如何回到原来的版本?
  3. 尚未完成的档案,想先储存可以怎麽做?
  4. 发现忘记切换分支怎麽办,想切回正确的分支?

参考文章

遇到不同状况、情境,都有对应的指令,加上参数使用,就可以成功执行我们想要的动作。

3. 储存库 ( Repository )

git status 档案状态 —> 已提交(Committed)

储存库是保存档案或是程序码的地方,暂存区的资料被提交到储存库後,可以永久保存。储存有关於内容的历史修改记录、有关专案的内容。

储存库先前的文章有提到分为集中式、分散式,储存库再细分可以分成远端及本地端。

  • 远端数据库 (Remote) - 为了让多人共享而建立的数据库,通常是一个共用的服务器。
  • 本地端数据库 (Local ) - 为了方便自己使用的数据库,通常是个人开发的电脑或机台。

做完提交的动作到 Repository ,整个 Git 的工作流程才算完整。


复习基本 Git 工作流程:

  1. 工作目录新增档案、修改档案
  2. 暂存区存取每一次的编辑动作。( git add )
  3. 将暂存区的档案提交到储存库永久储存。( git commit )

<<:  Day 8: Recap Day [1-7] & Enhance

>>:  【从实作学习ASP.NET Core】Day11 | 後台 | 详细资料与 ViewModel

通用标准评估--安全目标(ST)

-通用标准评估 安全目标(Security Target:ST) 供应商可以在安全目标(ST)中指...

【Day 2】机器学习的种类

机器学习的种类主要分成四种:监督式学习(Supervised learning)、非监督式学习(Un...

Day 1 - 参赛前言

前述 一直很佩服参加铁人赛的前人们,自己也在过去的铁人赛中看到很多优秀的文章,在朋友的鼓吹之下,也参...

[Day16] 第十六章-Skill的API 服务建构 (migration,route,controller,model)

前言 昨天我们建立了Skill的migtaion 我们今天目标是把简单的API定义好来实作吧!! 除...

[Day11] 团队系统设计 - 估点系统 (上)

2020年的 Q4 期间,我对几场面试的印象非常深刻,连续三位来自不同公司,不同领域背景的应徵者,不...