前言

git checkout 这个命令承担了太多职责,既被用来切换分支,又被用来恢复工作区文件,对用户造成了很大的认知负担。

Git社区发布了Git的新版本2.23。在该版本中,有一个特性非常引人瞩目,就是新版本的Git引入了两个新命令 git switch 和 git restore,用以替代现在的 git checkout。换言之,git checkout 将逐渐退出历史舞台。

Git社区决定这样做,是因为目前 git checkout 命令承载了太多的功能,这让新手们感到困惑。git checkout 的核心功能包括两个方面,一个是分支的管理,一个是文件的恢复。这两个核心功能,未来将由 git switch 和 git restore 分别负责。

相比之下,新命令旨在将职责明确分为两个较窄的类别:更改分支的操作​​和更改文件的操作。为此,请照顾前者和后者。为了我们的目的,让我们更详细地了解每个。git checkoutgit switchgit restore

案例比较

1、分支管理

在分支管理方面,目前切换分支以及创建分支,是使用

git checkout <分支名> 和 git checkout -b <分支名>

有了 git switch 之后,对应的命令分别为

git switch <分支名> 和 git switch -c <分支名> 

最简单的调用如下所示:git switch

$ git switch my-feature

Switched to branch 'my-feature'

Your branch is up to date with 'origin/my-feature'

在这种模式下,您可以将其视为类似于的无选择调用。如果要替换(或简称,),可以编写:git switchgit checkoutgit checkout --branchgit checkout -b

创建并且切换新分支

Tinywan@DESKTOP-TEDEO2S MINGW64 /d//wiot.tinywan.com (master)
$ git switch -c my-new-feature
Switched to a new branch 'my-new-feature' Tinywan@DESKTOP-TEDEO2S MINGW64 /d/wiot.tinywan.com (my-new-feature)
$ git branch

这里是短期的,并可以取代你的肌肉记忆。或者,从指定的提交开始(而不是分支当前已检出的提交):-c--creategit checkout -b 

$ git switch -c my-new-feature 0810beaed7

Switched to a new branch 'my-new-feature' 

文档中还有其他一些示例,包括上述更多示例以及有关如何设置跟踪分支,孤立分支等的一些示例。

2、文件恢复

git restore另一方面,它使确定要更改的文件,要更改的文件以及更改的位置变得容易得多。除了记住的纠结语义外,还提供了两个选项来指定还原的更改将移至何处。如果您通过(或完全不通过任何操作),则更改将进入您的工作副本。如果通过,它们将进入您的索引。最后,如果您同时通过了两者,则两者都将更改为相同的内容。git checkoutgit restore--worktree--staged

git restore还可以通过可选选项更轻松地了解要还原的内容来自何处。如果未指定,则从登台区域还原内容,否则,从特定树还原它们。注意:和之间的另一个区别是,默认为和将删除源树中不存在的跟踪文件。请参阅我们的2.22博客文章中的讨论。 --source--sourcegit checkoutgit restorerestore--no-overlay--overlay

例如,如果我希望文件在工作副本和索引中的内容都与三次提交之前相同,则可以这样写:main.c

$ git restore --source HEAD~3 --staged --worktree main.c

……更改将完全适用。的新文档中git restore还有更多示例。

小结

该文档中还有其他一些示例,包括上述更多示例以及有关如何设置跟踪分支,孤立分支等的一些示例。
git restore另一方面,它使确定要更改的文件,要更改的文件以及更改的位置变得容易得多。除了记住的纠结语义外,还提供了两个选项来指定还原的更改将移至何处。如果您通过(或完全不通过任何操作),则更改将进入您的工作副本。如果通过,它们将进入您的索引。最后,如果您同时通过了两者,则两者都将更改为相同的内容。

git checkoutgit restore--worktree--staged

工具系列 | git checkout 可替换命令 git switch 和 git restore的更多相关文章

  1. 【Git】时光机命令—Git命令

    cd c:    进入C盘 mkdir learngit          创建名为learngit的文件夹 cd learngit  进入learngit文件夹 pwd    显示当前目录路径 gi ...

  2. Git CMD - checkout: Switch branches or restore working tree files

    命令格式 git checkout [-q] [-f] [-m] [<branch>] git checkout [-q] [-f] [-m] --detach [<branch&g ...

  3. git工具使用方法及常用命令

    git下载地址:https://git-for-windows.github.io/git环境变量配置:增加:GIT_HOME = C:\Git (文件夹为git软件的安装文件夹)Path添加: %G ...

  4. git之命令git checkout

    git checkout 最常用的就是切换分支,最近又发现一种新的用法: 有时候,在看代码的时候,不小心改动了部分代码,但跟项目没啥关系,这个时候,想不去提交这些代码,怎么处理呢? 使用git che ...

  5. git workflow常用命令

    git init git status git add readme.txt git add --all         Adds all new or modified files git comm ...

  6. git链接GitHub命令及基本操作

    Git是一款不错的代码管理工具,下面引用百科的一段话:  Git是用于Linux内核开发的版本控制工具.与CVS.Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服 ...

  7. Git 与 SVN 命令学习笔记

    一:Git git config --global user.name "you name"   #设置用户名git config --global user.email &quo ...

  8. git初学 常用命令

    初学备忘: MAC 下 clone 项目的时候  记得  sudo -s  输入密码 获得 管理员权限,普通权限看不到 .babelrc 等 点开头的文件 ____——____——____——____ ...

  9. Git 基础 —— 常用命令

    Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 git init 创建 Git ...

随机推荐

  1. ubuntu--- tracker/libdeepsort.so 找不到cv报错

    一.刚开始解决尝试:因为“删掉lib下的libdeepsort.so报错”,原先以为是 libdeepsort.so 需要拷贝到 /lib路径下的问题,可是因为后来的工程有的好使,又的不好使了.''' ...

  2. while语句的练习一

    今天学习了while语句,自己想了一道题,试着练习,改了几次之后调试通过: 学生做题,如果全部都做对了,那么会得到老师的夸奖,如果做错了,那么每道题要罚抄十遍: namespace _999_1错题罚 ...

  3. 封装的Redis队列

    封装的Redis队列 MyRedisQueue.py #!usr/bin/env python2.7 # -*- coding: utf-8 -*- import redis class RedisQ ...

  4. 剑指offer-面试题14-剪绳子-贪婪算法

    /* 题目: 给定一个长度为n的绳子,把绳子剪为m段,(n>1,m>1) 求各段绳子乘积的最大值. */ /* 思路: 贪婪算法. 当绳子的长度大于5时,尽可能多的剪长度为3的绳子:当剩下 ...

  5. Petya and Array CodeForces - 1042D

    很不错的一道题 给你一个长度为n的数组,问共有多少个区间满足区间之和小于给定的数t 这种题一般做法肯定是枚举,固定左端点枚举右端点,枚举的过程需要优化,否则就是n方 这道题我先求一个前缀和,然后逆着枚 ...

  6. 咸鱼的ACM之路:DFS水题集

    DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止.(个人理解) 下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题... P159 ...

  7. 2020牛客寒假算法基础集训营4-F树上博弈

    链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...

  8. Django 上下文管理器,为父模板添加动态数据

    1.摘要:模板继承可以减少页面内容的重复定义,实现页面内容的重用. 但是当父模板中有动态数据的话,这些动态数据在子模版中是不会显示的.我们可以通过自定义上下文处理器来解决 2.Django上下文处理器 ...

  9. HTML-入门

    HTML——超文本标记语言(Hyper Text Markup Language)html——W3C制定的标准超文本——除了文本,还有图片.视频.音频等丰富的元素标记(标签)——用来展示内容表型:标签 ...

  10. [转] c# 中使用opencv进行视频捕获

    简介 这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的. 这将有助于那些喜欢C#和OpenCV环境的人.这个程序完全基于Visual Stud ...