• 【转】git reset, revert, checkout介绍及区别


    git reset, revert, checkout介绍及区别

    原文链接:http://maiyang.github.io/git/2016/04/21/git-reset-checkout-revert

    不知道大家对于git reset, revert, checkout几个命令了解不?

    在我们日常使用git时,时常被用到,我结合我自己的经验简单介绍一下,如果有说的不对,请及时纠正。

    首先,其实这3个命令的主要功能就是撤销(undo)。

    基本概念

    仓库

    git 仓库有三个组成(components),分别是:working directory(代码仓库),staged snapshot(快照:add的缓存库),commit history(commit历史)。

    git checkout

    git checkout hotfix 切换到hotfix分支,仅仅是将HEAD移到一个新的分支(hotfix)上,然后更新工作目录。

    因为这可能覆盖你本地修改,所以git强制你提交或缓存工作目录的所有更改,不然checkout的时候这些更改都会丢失。

    git checkout HEAD~3 快速查看项目HEAD之前的第3个版本,这个对于我们查看之前的变更很有帮助的。

    “git checkout – ..." to discard changes in working directory

    作用于working directory

    git reset

    git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区。

    1. git reset HEAD 回退所有内容到上一个版本
    2. git reset 057d 回退到某个版本

    git revert

    Revert撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。

    git revert HEAD~3:丢弃最近的三个commit,把状态恢复到最近的第四个commit,并且提交一个新的commit来记录这次改变。

    git reset 和git revert的区别

    1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
    2. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进
    3. 在回滚这一操作上看,虽然效果差不多,但是日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。

    使用场景

    下表来源于延伸阅读(1)

    命令作用域常用情景
    git reset 提交层面 在私有分支上舍弃一些没有提交的更改
    git reset 文件层面 将文件从缓存区中移除
    git checkout 提交层面 切换分支或查看旧版本
    git checkout 文件层面 舍弃工作目录中的更改
    git revert 提交层面 在公共分支上回滚更改
    git revert 文件层面 (然而并没有)

  • 相关阅读:
    实例图解SQL SERVER2000使用AWE进行内存优化
    使用Power Designer正反向数据库及生成设计报告
    使用SVN+CruiseControl+ANT实现持续集成之二环境搭建和配置介绍
    使用SVN+CruiseControl+ANT实现持续集成之三构建操作及监视
    【排序】排序算法之分配排序
    [Cocoa]自定义TableViewCell实现圆角/渐变色TableView
    [Cocoa]XCode 3.2 常用快捷键
    [Cocoa]实现了一套自定义动画库
    Vim 使用入门快捷键
    [Cocoa] iPhone/iPad 时区转换
  • 原文地址:https://www.cnblogs.com/ryq2014/p/6379364.html
Copyright © 2020-2023  润新知