文章目錄
這篇文章是兩篇教學其中一篇『Mastering Git 』的心得整理(大約四分之一內容)。課程連結 在此記錄我的學習心得,若有錯誤之處歡迎 comment 更正。
Git 的四個區域
- 最重要的 repository
我們使用Git的主要原因。repository 包含項目的整個歷史記錄。commit 的東西會放在這裡。
- 工作區域。working area
作業系統中目前檔案、資料夾的狀態,保存當前文件和文件夾的地方。
- 在 working area 跟 repository 這兩個區域之間,還有另一個稱為 index ( staging )的中間區域。
在其他教學中,比較常看到 staging area 這個名詞,說的是一樣的東西。這個課程都是叫做 index ,就統一叫它 index 好了。index ara 是在 commit 之前 ,放置文件的地方。
- Stash
臨時存儲區域,它不像其他三個重要。
要想真正理解一個 Git 命令,你應該問兩個重要的問題。 如果你能回答這兩個問題,那麼無論命令如何複雜都沒有關係。
這個命令如何在四個區域之間傳輸數據?
例如,某個命令是否將數據從 index area (staging area )複製到 repository?從 repository 到 working area?它是否刪除任何區域的任何數據?等等。
這個命令對 Repository 做些什麼改變?
Repository 是四個領域中最重要的,某個命令如何改變 repository 那邊的數據?它是否創建新的 commit ?它移動分支嗎?它移動HEAD嗎?等等。
working area 和 Repository 中的 current commit 包含相同的數據
對於 Git 來說,working area 是一個非常臨時的地方。Git 大部分時候會避免破壞 working area 的數據;但有些命令會破壞 。所以在 commit 之前 (把文件從 index 複製到 repository 之前),不要認為你的數據是安全的。
working area -> Index -> Repository
最常做的流程:
把資料從 working area 複製到 Index
git add
git rm — cache
rm 是刪除 repository 區域的資料。要把文件從 index 刪除,記得還要加上
— cache 選項
把文件從 Index 複製到 Repository
git commit
當文件到達 repository 之後,基本上資料就安全有保障了。
git status
比較 working area 和 index 區域之間的區別。
git status 指令後,如果看到這個消息:
your branch is up-to-date with ‘origin/master’, nothing to commit, working tree clean
這代表 working area ; index ; repository 三個區域都有相同的文件和文件夾。
git diff
比較兩個區域之間的區別。如果使用git diff 而沒有任何參數,將比較Working Area和Index。
git diff — cached
大多數時候,我們會想要比較 即將 commit 的東西與 已經 commit 的東西。也就是說,比較 Index 和 Repository
git checkout 做兩個動作
git checkout branchName
- checkout **對 Repository 做些什麼改變?
**在 『how git works 』有說過的: 移動 HEAD 到另一個分支。
- checkout **如何在四個區域之間傳輸數據?
**然後,把當前數據從 repository 複製到 working area 和 index 中。
(待續)