Git - reset, checkout, revert 总结

在git版本管理中,经常有将其他提交与当前代码环境内容交互的需求,其中git resetgit checkoutgit revert是与此类需求有关的一些命令,它们可以用来调整代码仓库中的某些更改;而且git resetgit checkout两个命令不仅可以作用于提交,还可以作用于特定文件,本文介绍上述三个命令的区别与工作原理。

git 基础内容

git 相关基础概念与常用命令使用方法在 Git - 使用教程 中有介绍,本文在此基础上进行展开。

作用域

这三个命令可以作用于提交文件

命令可用于提交可用于文件
git reset
git checkout
git revert×

下面从这两个作用域的角度分别介绍相关命令的功能。

作用于提交

三个命令常用的用法均为回退,但是三个命令的实现细节事实上有很大的区别。

git reset
  • 工作原理:

    当 reset 的作用对象为提交时,reset将一个分支的末端指向另一个提交。

    • 通过传入这些标记来修改你的缓存区或工作目录:

      –soft – 缓存区和工作目录都不会被改变

      –mixed (默认选项) 缓存区和你指定的提交同步,但工作目录不受影响

      –hard – 缓存区和工作目录都同步到你指定的提交

  • 实例应用:

     git reset HEAD~2
    

    把当前分支reset到HEAD~2。

    git reset --mixed HEAD
    

    将当前的改动从缓存区中移除,但是这些改动还留在工作目录中。

     git reset --hard HEAD
    

    完全舍弃还没有提交的改动

checkout
  • 工作原理:

    checkout命令以提交为参数时,将当前工作区、暂存区、仓库均切换到目标提交时的状态。

  • 实例应用:

     git checkout <branch>
    

    切换到指定分支

     git checkout <commit>
    

    切换到指定提交

revert
  • 工作原理:

    通过创建一次新的 commit 来撤销一次 commit 所做出的修改。这种撤销的方式是安全的,因为它并不修改 commitm history

  • 实例应用:

     git revert HEAD~2
    

    将会查出倒数第二次(即当前commit的往前一次)提交的修改,并创建一个新的提交,用于撤销当前提交的上一次 commit

作用于文件

git reset
  • 工作原理:

    当检测到文件路径时,git reset 将缓存区同步到指定的提交。

  • 实例应用:

     git reset HEAD~2 foo.py
    

    将文件 foo.py 在缓冲区的状态更改为HEAD之前2个的提交。

注: --soft、–mixed和–hard对文件层面的git reset毫无作用,缓存区中的文件一定会变化,而工作目录中的文件一定不变。

checkout
  • 工作原理:

    提取某个已经缓存的文件状态(缓存区、提交)用于覆盖当前工作区的文件。

    与reset作用于文件相比,不同的是checkout更改的文件位置为工作区,reset为暂存区

  • 实例应用:

     git checkout HEAD~2 foo.py
    

    将工作目录中的foo.py同步到了倒数第二个提交中的foo.py。

     git checkout -- foo.py
    

    当不指定特定提交时,checkout 优先从暂存区中提取文件副本覆盖工作区文件;当文件没有在暂存区提交过(没有add过)时,从仓库中(当前提交)提取文件副本覆盖工作区文件。

    也就是说,该命令会提取最近的一次保存的副本覆盖当前工作区的文件。

参考资料:

  • https://www.cnblogs.com/houpeiyong/p/5890748.html
  • https://www.jianshu.com/p/285302d1eb73
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值