Git-reset当中的soft和hard
1. git
的三棵树
workspace/source tree
: 就是本地物理意义上的文件树index/staged/staging tree
:用过git add
添加进去的“暂存区”commit tree
:持久化写入
2. reset回退的三种状态
soft
:影响commit tree
mixed
:影响commit tree
+staged tree
hard
:影响commit tree
+staged tree
+workspace
3. git reset --soft
- 只影响
commit tree
- 比如以下场景:
- 想要回退红框里面的提交,但是希望添加进去的
file11.md
这个文件,依然处在staged tree
当中,所以需要使用不影响当前暂存区状态(staged tree) 的命令git reset --soft 4a4fa3a
- 使用之后,
commit tree
如下所示: staged tree
如下所示:状态不变
4. git reset --mixed
- 这是
reset
的默认状态 - 暂存区(staged tree)会改变,但是 工作区(workspace)不变
- 示例如下所示:
- 工作区有“未暂存的更改”:tmp-file.md
- 完成提交 c14d7c8d,现在希望将此提交回退到 44542fb5 状态
- 回退之后,staged tree 应该是空的,因为 44542fb 状态对应的 staged tree 就是空的
- workspace 保持不受影响,那么之前添加的 tmp-file.md 依然得到了保留,并且 file12.md 会回退到workspace当中(被从staged tree 当中清理出来了)