文章目錄
這篇文章上半部來講一個非常實用的命令 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]