前言

在 Git 术语中,“checkout”是在目标实体的不同版本之间切换的行为。该命令对三个不同的实体进行操作:文件、提交和分支。除了“checkout”的定义之外,短语“检出”通常用于表示执行命令的行为。在撤消更改主题中,我们了解了如何使用来查看旧提交。git checkout

checkout分支类似于checkout旧的提交和文件,因为工作目录会更新以匹配选定的分支/修订;但是,新更改将保存在项目历史记录中,也就是说,它不是只读操作。

Checking out branches

该命令允许您在由创建的分支之间导航。检出一个分支会更新工作目录中的文件,以匹配存储在该分支中的版本,并告诉 Git 在该分支上记录所有新提交。将其视为选择正在进行开发的哪条线路的一种方式。

git checkoutgit branch

为每个新功能创建一个专用分支是从传统的 SVN 工作流程中进行了巨大转变。这使得尝试新实验变得非常容易,而不必担心破坏现有功能,并且可以同时处理许多不相关的特性。此外,分支还促进了几种协作工作流程。

git checkout git clone

该命令有时可能会与混淆。两个命令之间的区别在于,clone 命令用于从远程存储库获取代码,而 checkout 命令则用于在本地系统上切换已经存在的代码版本。

Usage: Existing branches

$> git branch
main
another_branch
feature_inprogress_branch
$> git checkout feature_inprogress_branch

New Branches

从当前创建

git checkout -b <new-branch>

从特定分支创建

默认情况下将基于当前。可以传递一个可选的附加分支参数到。在上面的例子中,被传递,然后以为基础而不是当前。

git checkout -b <new-branch> <existing-branch>

Switching Branches

git checkout <branchname>

Git Checkout a Remote Branch

与团队合作时,通常会使用远程存储库。这些存储库可以是托管和共享的,也可以是另一个同事的本地副本。每个远程存储库都将包含其自己的一组分支。为了检出远程分支,您必须首先获取该分支的内容。

git fetch --all

在现代版本的Git中,您可以像本地分支一样检出远程分支。

git checkout <remotebranch>

旧版本的Git需要基于.remote创建一个新分支。

git checkout -b <remotebranch> origin/<remotebranch>

此外,您可以检出一个新的本地分支并将其重置为远程分支的最后一次提交。

git checkout -b <branchname>
git reset --hard origin/<branchname>

Detached HEADS(分离HEAD)

现在我们已经看到了分支的三个主要用途,重要的是讨论状态。请记住,状态是 Git 引用当前快照的方式。在内部,该命令只需更新为指定分支或提交即可。当它指向一个分支时,Git 不会抱怨,但当您检出一个提交时,它会切换到一种状态。

"Detached HEAD"是Git版本控制系统中的一个术语,指的是当前所在分支不再与任何具体的分支关联。这种情况通常发生在以下两种情况下:

  1. 当您检出(checkout)某个特定提交时,而不是检出某个分支时。
  2. 当您从一个没有命名的分支上进行操作时。

当HEAD处于“detached”状态时,您可以对代码库进行修改和提交,但这些更改将无法保存到任何现有分支上。如果要保留更改并创建新的永久性分支,则需要使用git branch命令手动创建新的分支,并将其指向当前HEAD所在位置。

总之,“Detached HEAD”状态通常被视为一种临时状态,在完成必要操作后应该尽快恢复到正常模式以避免潜在问题。

git checkout``“detached HEAD”``HEAD``git checkout``HEAD``“detached HEAD”

这是一个警告,告诉你所有的操作都与项目开发的其余部分“脱离”了。如果您在脱离状态下开始开发某个功能,则没有分支可以让您返回该状态。当您不可避免地检出另一个分支(例如合并您的功能)时,将无法引用您的功能:HEAD。

未来:switch+restore

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 checkout 可替换命令 git switch 和 git restore - Tinywan - 博客园 (cnblogs.com)

参考资料

英语原文:Git Checkout | Atlassian Git Tutorial

git checkout switch restore的更多相关文章

  1. 工具系列 | git checkout 可替换命令 git switch 和 git restore

    前言 git checkout 这个命令承担了太多职责,既被用来切换分支,又被用来恢复工作区文件,对用户造成了很大的认知负担. Git社区发布了Git的新版本2.23.在该版本中,有一个特性非常引人瞩 ...

  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 checkout -b dev origin/dev"命令报出:fatal: Cannot update paths and switch to branch 'dev' at the same time. Did you intend to checkout 'origin/dev' which can not be resolved as commit?问题解决

    在学习廖老师git教程之多人协作模块时按照老师的操作先创建了另一个目录,然后在这个目录下从GitHub上clone了 learngit目录到这个目录下,同样的执行了git branch查看分支情况,确 ...

  4. git checkout 和 git checkout --merge <branch_name>使用

    一.git checkout //查看当前分支$ git branch master *t2 testing //checkout会覆盖当前工作区文件和覆盖暂存区内容,所以发现分支有未提交的警告,执行 ...

  5. git checkout -b 分支name 分支的新建, 切换, 删除, 查看

    $ git checkout 711 -berror: switch `b' requires a value 以上, 可以看出, 参数 -b  放到最后是错误的. 711@MININT- 64 /d ...

  6. git checkout -b 报错

    有时候在git中checkout -b 出现如下报错 $ git checkout -b test --track origin/master fatal: Cannot update paths a ...

  7. git checkout 提示 “error: The following untracked working tree files would be overwritten by checkout” 解决

    问题描述 Windows 或者 macOS 操作系统中,文件名是不区分大小写的.对于已经提交到仓库中的文件修改文件名的大小写,然后又用 git rm 命令将老文件从 Git 仓库删除掉,并保存下新的文 ...

  8. 代码回滚:git reset、git checkout和git revert区别和联系

    git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...

  9. 分支合并git checkout adview git merge adview3

    分支合并 git checkout adview git merge adview3

  10. 每天一命令 git checkout

    检出 checkout  是git常用命令之一.主要用于创建切换分支,覆盖本地修改等 git checkout 用于显示工作区,暂存区,版本库中文件的区别 git checkout -b branch ...

随机推荐

  1. IDEA画图神器 PlantUML

    PlantUML 是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效.可以支持时序图.类图.对象图.活动图.思维导图等图形的绘制. 下面使用PlantUML来绘制一张流程图,可以实 ...

  2. PPT 小图标 设计感Max 精修

    https://www.bilibili.com/video/BV1ha411g7f5?p=14 图标用处 信息可视化,快速获取信息 增加内容图示化细节,增强设计感 SVG/PNG 图标使用 SVG ...

  3. JAVA SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败

    [2021-01-15 13:20:14.623] ERROR [Druid-ConnectionPool-Create-497208183] DruidDataSource.java:2471 - ...

  4. python 解析字节码的相关方法

    python代码被解释器执行时分为两步走: 一.python编译器将代码编译成字节码 二.python虚拟机执行字节码 由于这两步是一起的,所以在python编程中很少能看到字节码.但是想要提高代码效 ...

  5. Mongodb--用户/权限

    mongodb分为管理员用户和普通用户,并且还有个验证库,建立用户时use到的库(验证库),信息就存储在admin数据库下. 在使用用户时,要加上验证库才能登录,对于管理员用户,必须在admin下创建 ...

  6. uniapp#实现自定义省市区三级联动

    uni-APP中的三级联动(省市区)---数据前端写死 https://blog.csdn.net/lwaner/article/details/107150805 uniapp#实现自定义省市区三级 ...

  7. Vue和Android交互,Android回调Vue的方法

    https://blog.csdn.net/Zhizhiwei/article/details/80425204 Android webview 与 js(Vue) 交互 https://blog.c ...

  8. @Conditional注解使用及@ConditionalOnXXX各注解的作用

    本文为博主原创,转载请注明 出处: 一.@Conditional注解作用: 必须是 @Conditional 注解指定的条件成立,才会在容器中添加组件,配置类里面的所有配置才会生效 二.@Condit ...

  9. [转帖]技术分享 | MySQL:一文弄懂时区&time_zone

    https://opensource.actionsky.com/20211214-time_zone/   作者:胡呈清 爱可生 DBA 团队成员,擅长故障分析.性能优化,个人博客:https:// ...

  10. [转帖]Web技术(四):TLS 握手过程与性能优化(TLS 1.2与TLS 1.3对比)

    https://blog.csdn.net/m0_37621078/article/details/106126033?ops_request_misc=%257B%2522request%255Fi ...