git reset 的三種主要模式(--soft, --mixed,--hard),一直困擾著我不太確定知不知道其中差異,似懂非懂,最近剛好為公司同事進行Git教育訓練,藉機來把觀念釐清
head 指向上一版
index 未改變(a.txt 標記成Modified,b.txt 標記成Added)
working tree 未改變(內容是新版)
僅移除commit
head 指向上一版
index 移除staged標記(表示不在 commit 的範圍)
2-1. 以a.txt來看
保留
修改,但沒有被納入staged
2-2. 以b.txt來看
保留
新增,但是untracked
working tree 未改變(內容是新版)
移除commit及staged
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,如果哪邊寫錯,要請大家多指教。
1.Git 學習筆記 (1):安裝、選項設定、在本地使用 Git 工具
2.30 天精通 Git 版本控管 (07):解析 Git 資料結構 - 索引結構
3.30 天精通 Git 版本控管 (05):瞭解儲存庫、工作目錄、物件與索引之間的關係