Mastering Git_2
這篇文章上半部來講一個非常實用的命令 reset 。
Mastering Git_2
這篇文章上半部來講一個非常實用的命令 reset 。
下半部介紹一個具有強大破壞力的 checkout [tree-ish] [filePath] 指令,使用之前務必要清楚自己在做什麼。
從先前學到的知識,搞懂 working area ; index ; repository 區域;還有分支的概念之後,接下來就可以輕鬆理解 reset 這個強大工具是怎樣運作的。

會移動分支的命令
以上所有這些操作都會移動分支,但是,它們中沒有一個是移動分支的專門操作。移動分支對這些 command 來說只是一種副作用。
專門拿來移動 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

不覆蓋
e.g.

git reset — hard (先移動branch ; HEAD 。然後覆蓋資料)
checkout [branch] 跟 reset -hard 其實很像
checkout [branch] : 移動 HEAD
reset: 移動 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]](https://miro.medium.com/v2/resize:fit:508/1*T3RbOFv9LgIohSyv318JtA.gif)
git checkout [tree-ish] [filePath]
請注意,使用 checkout [tree-ish] [filePath] 並不像 checkout [branch] 那樣無害。
它實際上是你在Git中可以做的最具破壞性的操作之一。連警告都沒有,Git 只是迅速而非常隱蔽地銷毀了我們對文件的所有更改。
메타데이터
- post_id
- e71fdf72da39
- slug
- mastering-git-2-e71fdf72da39
- url
- https://medium.com/@wodyaln/mastering-git-2-e71fdf72da39
- canonical_url
- https://medium.com/@wodyaln/mastering-git-2-e71fdf72da39
- author_url
- https://medium.com/@wodyaln
- status
- ok
- fetched_at
- 2026-07-30 02:52:00