Featured image of post Mastering Git_1

Mastering Git_1

要想真正理解一個 Git 命令,你應該問兩個重要的問題。 如果你能回答這兩個問題,那麼無論命令如何複雜都沒有關係。

這篇文章是兩篇教學其中一篇『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 中。

(待續)

最後更新 Feb 15, 2022 12:37 +0800