Featured image of post Mastering Git_2

Mastering Git_2

專門拿來移動 branch 的指令:reset

這篇文章上半部來講一個非常實用的命令 reset

下半部介紹一個具有強大破壞力的 checkout [tree-ish] [filePath] 指令,使用之前務必要清楚自己在做什麼。

從先前學到的知識,搞懂 working area ; index ; repository 區域;還有分支的概念之後,接下來就可以輕鬆理解 reset 這個強大工具是怎樣運作的。

專門拿來移動 branch 的指令:reset

reset 做兩個動作:

  • reset 對 Repository 做些什麼改變? step 1. 移動 current branch ( HEAD 會跟着 current branch 跑 )

  • reset 如何在四個區域之間傳輸數據? step 2. 把資料從 repository 覆蓋到 working area ; index 區域 根據你的需求,分別有 — hard / — mixed / — soft 的選項:

覆蓋到 working area 還有 index

只覆蓋到 index

不覆蓋

git reset 動畫解釋

git reset — hard (先移動branch ; HEAD 。然後覆蓋資料)

checkout [branch] 跟 reset –hard 其實很像

git checkout [branch] : 移動 HEAD

git reset [commitHash]: 移動 branch

如果只是想要把某個檔案從 repository 複製到 index/working area 呢?

git checkout [tree-ish] [filePath]

tree-ish : 通常是一個 branch 或 一個commit 或 一個 HEAD@{int}

之前我們用的 checkout [branch] 會把 repository 的資料,全部複製到 index area還有 working area (HEAD 也會移動到該 branch )。

checkout [tree-ish] [filePath] 跟 checkout [branch] 最大不同在於: HEAD 不移動,留在原地 。用白話文解釋就是:去 [tree-ish] 所代表的某個 commit 之中,找到 filePath 指定的檔案,把這個檔案覆蓋到 woking / index area。

git checkout [tree-ish] [filePath]

請注意,使用 checkout [tree-ish] [filePath] 並不像 checkout [branch] 那樣無害。

Source

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