美文网首页
git reset 演示

git reset 演示

作者: 三松屋老板 | 来源:发表于2020-05-29 15:30 被阅读0次

    git reset --hard <version>
    作用:切换节点(通过切换节点 达到撤销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 演示

          本文链接:https://www.haomeiwen.com/subject/jcexyhtx.html