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 標記,變成Modified or Untracked ,內容是新版的 |
hard | changed | changed | changed | 回到上一版版本,其間變更完全移除(接近 svn revert),內容及狀態皆是上一版 |
操作 Repository:GitHub
整理後清楚多了,就怕結論是錯的XD,如果哪邊寫錯,要請大家多指教。
1.Git 學習筆記 (1):安裝、選項設定、在本地使用 Git 工具
2.30 天精通 Git 版本控管 (07):解析 Git 資料結構 - 索引結構
3.30 天精通 Git 版本控管 (05):瞭解儲存庫、工作目錄、物件與索引之間的關係