git 指定的commitid_Git新命令switch和restore

6417d0e9217bd8df4058bde135be741b.png

最近发现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分支

下面来总结对比下

7c6f44c8a45c1d9bb6a2f3dee2c4fa1c.png

文件恢复

原来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 # 同上

一图胜千言系列

695c4c278cf8282575a901573700d850.png

新的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

一图胜千言系列

da7907414e9e748b41c34ffb70717a5d.png

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

总结

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

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

原文网址:

Git新命令switch和restore​yanhaijing.com
b09afb1acb0a9535eb2018ff0a2638b6.png
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值