iT邦幫忙

0

Working directory(工作區), Staging area(暫存區), Git directory(儲存庫) | 再談 Git

git
  • 分享至 

  • xImage
  •  

同步發表於個人 blog

工作區、暫存區與儲存庫

Git 大致可以分成三個區,分別是 Working Directory(工作區)Staging Area(暫存區)Git Directory(儲存庫),如下圖所示。
Working Directory, staging area, and Git directory

與其對應,在 Git 中,檔案可能處於以下狀態:

  • Working Directory
    • Tracked : 檔案已被之前的 commit 存入儲存庫,在 Git 的管理範圍內。
      • Unmodified:檔案內容與最後一次 commit 相同,沒有變更。
      • Modified:檔案內容已更改,但尚未加入 Staging area。
    • Untracked : 其他不在 Repository ,也不在 Staging Area 的檔案,不在 Git 的管理範圍內。
  • Staging Area
    • Staged:檔案已加入 Staging area,等待 commit。
  • Git Directory
    • Committed:commit 已被提交並存入儲存庫。

Working Directory(工作區)

Working Directory 可以視為 Git Directory(儲存庫) 的某個版本,讓開發者能夠在此進行修改和編輯。

Staging Area(暫存區)

Staging Area 用來存放將要進入下一次提交的資訊。

Git Directory(儲存庫 Repository)

這是 Git 最核心的部分,metadata 和 database 都放這,當你從其他地方 git clone 時,所複製的就是這個。

基本 Git 流程

  1. 修改 Working Directory 中的檔案。
  2. git add - 將修改的內容加入 Staging Area。
  3. git commit - 將 Staging Area 中的檔案提交至 Repository。

試著使用 git 吧!

初始化 Repository

git init

Initializing a Repository

會在目錄中建立 .git 資料夾,讓 Git 開始對該目錄進行版本控制。
git init

檢查狀態

git status

Checking the Status of Your Files

用於查詢當前目錄的 Git 狀態,例如哪些檔案被修改、哪些檔案在暫存區等。
git status

新增檔案

我們試著加入檔案,看看有何變化

git status

add file

把檔案加入暫存區

git add <file>

Staging Modified Files

將修改的檔案加入 Staging Area,等待提交。
git add
git add , status

📌 Note
為何需要 Staging Area?
看起來可能多此一舉,但以下的情況只要透過 Staging Area 就能順利解決:

  • 你正在寫一個功能,但被打斷去做其他開發,想先保存未完成的 code? - git stabash
  • 修改了多個檔案,但只想提交部分檔案?
  • 寫到一半才發現忘了切換分支? - git stabashgit checkout

還有很多情形,只要善用 Staging Area ,就能輕鬆處理這些情況。

提交變更

git commit -m <message>

Committing Your Changes

此指令會將 Staging Area 的內容提交至 Git Directory,形成一個新的版本。
git commit -m

📌 Note
-m 參數後的訊息是 提交訊息,用來記錄這次提交的變更內容,幫助自己與其他開發者了解這次的修改。
所以不要亂寫,個人建議,寫"為甚麼",而不是"改了甚麼",畢竟 git 已經紀錄了,原因才是重要的部分。

📌 Note
git commit 只會提交 Staging Area 中的檔案,尚未加入的檔案仍然保持 Modified 狀態,可在下次提交時加入。

新增修改

我們試著修改剛剛加入的檔案,可以看到 git 發現了我們的修改
modify file

接著,把修改加入暫存區
modify file add

提交變更
commit new

檢視紀錄

最後,來看看之前 Commit 的紀錄吧,可以看到透過不同參數(這裡用--graph),可以有一些不同的效果。

git log

git log

從紀錄中,我們可以看得出來:

  1. Commit 的作者。
  2. Commit 的時間。
  3. Commit 做了什麼事。

至於 Commit 後的那串,是 hash value ,可以看做是每個 Commit 唯一的 ID 。

現在用的是 SHA-1 ,目前已經逐漸開始往 SHA-256 遷移

這裡是個使用 gui 的好時機。
git log , ui

References

Photo by Svitlana on Unsplash


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言