文章目錄
Git reset 的三種模式( soft mixed hard )比較
git reset 的三種主要模式(–soft, –mixed,–hard),一直困擾著我不太確定知不知道其中差異,似懂非懂,最近剛好為公司同事進行 Git 教育訓練,藉機來把觀念釐清
情境
- 建立 git repository
- 新增 a.txt
- 修改 a.txt 並 commit
修改 a.txt 並新增 b.txt 後 commit

原始檔案狀態

測試

1. git reset –soft

head 指向上一版

index 未改變(
a.txt標記成Modified,b.txt標記成Added)
working tree 未改變(內容是新版)
僅移除
commit
2. git reset –mixed
- 不指定時的預設行為
- 保留檔案變更
head 指向上一版

index 移除
staged標記(表示不在 commit 的範圍)
2-1. 以
a.txt來看保留
修改,但沒有被納入staged2-2. 以
b.txt來看保留
新增,但是untracked
working tree 未改變(內容是新版)
移除
commit及staged
3. git reset –hard

head 指向上一版

index 移除
staged標記(表示不在 commit 的範圍,且因修改的內容被移除,所以也不會被標記Modified)
working tree 移除修改的內容
完全回到上一版

結論
| 名詞 | 解釋 |
|---|---|
| head | 所在位置 |
| index | 變更狀態紀錄 |
| working tree | 工作目錄 |
| mode | head | index | working tree | 說明 |
|---|---|---|---|---|
| soft | changed | unchanged | unchanged | 僅移除commit變成新版未 commit,內容仍是新版的 |
| mixed | changed | changed | unchanged | index 移除staged標記,變成Modifiedor Untracked,內容是新版的 |
| hard | changed | changed | changed | 回到上一版版本,其間變更完全移除(接近 svn revert),內容及狀態皆是上一版 |
操作 Repository:GitHub
整理後清楚多了,就怕結論是錯的XD,如果哪邊寫錯,要請大家多指教。
參考資料
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。
