IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Git新命令switch和restore

    颜海镜发表于 2020-09-17 00:00:00
    love 0

    最近发现git在修改完文件后,提示恢复修改的命令是restore,如下所示,印象中应该是checkout,所以就研究了下,总结一下分享给大家

    $ git status
    
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
    	modified:   _posts/git/2020-8-24-how-to-transfer-a-git-repo.md
    

    原来是git中的checkout命令承载了分支操作和文件恢复的部分功能,有点复杂,并且难以使用和学习,所以社区解决将这两部分功能拆分开,在git 2.23.0中引入了两个新的命令switch和restore用来取代checkout

    下面分别来说说分支操作和文件恢复,如果你对git还不太熟悉,可以先阅读我的git入门文章

    • 起底Git
    • 我的git笔记
    • 图解4种git合并分支方法

    分支操作

    原来git有两个命令用来操作分支,分别是branch和checkout

    其中branch用来管理分支

    $ git branch ## 查看当前所在分支
    $ git branch aaa # 新建分支aaa
    $ git branch -d aaa # 删除分支aaa
    

    checkout用来切换分支,切换分支时,也可以新建分支

    由于git中分支仅仅是一个commit id的别名,所以checkout也可以切换到一个commit id

    $ git checkout aaa # 切换到 aaa分支
    $ git checkout -b aaa # 创建aaa,然后切换到 aaa分支
    $ git checkout commitid # 切换到某个commit id
    

    checkout命令会用仓库中的文件,覆盖索引区(staged or index)和工作目录(work tree)

    新的switch命令用来接替checkout的功能,但switch不能切换到commit id

    $ git switch aaa # 切换到 aaa分支
    $ git switch -c aaa # 创建aaa,然后切换到 aaa分支
    

    下面来总结对比下

    操作 2.23- 2.23+
    管理分支 git branch git branch
    切换分支 git checkout git switch
    新建+切换分支 git checkout -b git switch -c
    切换到commit id git checkout git checkout

    文件恢复

    原来git中文件恢复涉及到两个命令,一个是checkout,一个是reset,reset除了重置分支之外,还提供了恢复文件的能力

    $ git checkout -- aaa # 从staged中恢复aaa到worktree
    $ git reset -- aaa # 从repo中恢复aaa到staged
    $ git checkout -- HEAD aaa # 从repo中恢复aaa到staged和worktree
    $ git reset --hard -- aaa # 同上
    

    一图胜千言系列

    新的restore命令专门用来恢复staged和worktree的文件

    $ git restore [--worktree] aaa # 从staged中恢复aaa到worktree
    $ git restore --staged aaa # 从repo中恢复aaa到staged
    $ git restore --staged --worktree aaa # 从repo中恢复aaa到staged和worktree
    $ git restore --source dev aaa # 从指定commit中恢复aaa到worktree
    

    一图胜千言系列

    可以看到restore提供checkout和reset两个命令才能提供的文件恢复能力,也提供了更好的语义

    总结

    大家可以继续使用自己熟悉的命令,毕竟熟悉的才好用,本文希望能够帮助大家理清这个问题,满足大家的好奇心

    git这样一个成熟的项目,一直处在不停的演进进化中,我们作为开发者也要保持持续学习演进的能力,共勉👊



沪ICP备19023445号-2号
友情链接