git reset 演示

git reset --hard
作用:切换节点(通过切换节点 达到撤销commit的目的)
一共3种方式 hard soft mixed
准备demo
git log
文件创建完毕 并且提交了2次改动 分别增加一行内容


屏幕快照 2020-03-17 下午7.59.26.png

文件内容


屏幕快照 2020-03-17 下午8.00.53.png

1.hard

会清空 工作区 暂存区的修改 并将不会保留当前节点和原节点之间的差异

演示:
此时 同时在工作区 暂存区 添加修改内容
每次修改 各增加了一行 就不上图了
没有commit 所以git log 同之前的内容


屏幕快照 2020-03-17 下午8.02.48.png

接着 reset --hard到git log的 第一次修改 也就是版本号ff92caae00a346229272985118e501c27284276e

屏幕快照 2020-03-17 下午8.08.04.png

结果:第二次修改的commit 内容 都没了 就不上图了

恢复demo为接下来的测试做准备

2.soft

演示:
同hard
此时 同时在工作区 暂存区 添加修改内容
每次修改 各增加了一行 就不上图了
没有commit 所以git log 同之前的内容


屏幕快照 2020-03-17 下午8.02.48.png

接着 reset --hard到git log的 第一次修改 也就是版本号ff92caae00a346229272985118e501c27284276e
结果:
git status


屏幕快照 2020-03-17 下午8.22.10.png

从git status 中 看不出来具体结果
文件内容
屏幕快照 2020-03-17 下午8.22.37.png

可以看到 工作区 暂存区 之前的修改 都在
并且 当前节点 与 原节点的差异 放到了暂存区
恢复demo

3.mixed

同hard soft
此时 同时在工作区 暂存区 添加修改内容
每次修改 各增加了一行 就不上图了
没有commit 所以git log 同之前的内容
就不上图了

结果:
git status


屏幕快照 2020-03-17 下午8.28.53.png

文件内容


屏幕快照 2020-03-17 下午8.29.12.png

仔细看代码行数右边的绿线 vscode 自带的提示效果 说明所有改动(节点之间的差异,reset前的工作区 暂存区改动)都在工作区

至此 reset 3种不同参数的演示结束了
从演示结果来看 hard模式 是最容易理解的 丢弃所有修改 回到目标head
但是 soft mixed模式 不得不引起思考:
1.把节点间的差异 放在工作区 与暂存区 有什么区别?
2.如果节点间的差异 存在冲突 如何处理?
3.如果节点间差异 和 commit之后的修改 即 “暂存区的修改 工作的修改”又有冲突 如何处理?

问题2:

1.增加第三次commit 在第二次修改行 增加内容“第三次修改”
2.reset回第一次修改
结果:第2 3次修改 内容都在 这里比较容易理解 merge了;那么接下来 我在第二次修改的基础山 删除一些内容
恢复demo


屏幕快照 2020-03-17 下午8.43.24.png

写到这里,我认为,git 应该只是对比节点之间的差异,把差异放在工作区/暂存区,而不关心中间的改变是如何发生的
结果:和我想的一样

你可能感兴趣的:(git reset 演示)