Git新功能:switch、restore

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git新功能:switch、restore相关的知识,希望对你有一定的参考价值。

参考技术A 这篇文章将介绍 git restore 和 git switch 两个命令。

想要了解为什么新增了 git restore 和 git switch 命令,需先介绍下 git checkout 命令。

git checkout 的功能根据上下文决定,这一点经常让新手感到疑惑。

git checkout 经常用来切换本地分支,即切换HEAD指向的分支。例如,从 main 分支切换到 develop 分支。

也可以让 HEAD 指针指向指定的提交,而非一个分支。此时,会进入分离分支状态(detached HEAD state)。

当为 git checkout 参数添加文件时,事情开始变得奇怪起来。它会舍弃本地修改,使用分支状态替换。例如,切换到 dev 分支后对 test.txt 文件做了一些修改,你可以使用当前分支最后提交中 test.txt 文件替换当前文件,即恢复到指定提交中的状态。

查看 git checkout 文档,会发现该命令还有一个常被忽略的参数:

<tree-ish> 代表很多不同的东西,但最常见的是代表提交哈希和分支名。默认为当前分支,但也可以是任意分支、任意提交。

因此,当前在 dev 分支,想要将 test.txt 文件改变为 main 分支的版本,可以使用以下命令:

总结来看,给 git checkout 命令传递分支、提交作为参数,它会把所有文件修改到指定版本状态;如果指定了文件名称,它只会修改指定文件到指定版本。

虽然上面部分已经介绍了 git checkout 的使用细节,但确实很容易让新手产生疑惑。 git 2.23 版本引入了两个新的命令: git switch 和 git restore ,每个命令只做 git checkout 的一部分工作。 git checkout 仍然可以使用,但这两个命令对新手更友好。

git switch 用来切换分支或提交。

使用 git checkout 时,可以传入提交,切换到 detached HEAD 状态。 git switch 默认不支持此操作,需提供 -d 标记:

另一点不同是,使用 git checkout 把创建、切换合并到一个命令时,使用 -b 标记:

使用 git switch 创建并切换到新分支,使用 -c 标记:

git checkout 传递文件切换文件状态部分功能由 git restore 实现。使用 git restore 命令可以把文件恢复到指定状态:

如果指定了 path,但 restore source 中不存在,则会移除文件以达到和指定版本一致的状态。

参考资料:

欢迎更多指正: https://github.com/pro648/tips

本文地址: https://github.com/pro648/tips/blob/master/sources/Git%E6%96%B0%E5%8A%9F%E8%83%BD%EF%BC%9Aswitch%E3%80%81restore.md

以上是关于Git新功能:switch、restore的主要内容,如果未能解决你的问题,请参考以下文章

php 使用switch_to_blog而不是restore_current_blog修补愚蠢的插件

git基础教程(14)取消暂存和取消工作区修改git restore 和 git restore --staged

Git的命令之restore

“git rm --cached”、“git restore --staged”和“git reset”有啥区别

git操作之四:git branch(本地仓库)

git restore 删除后未提交的已删除文件