前言

在 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. 用 Java?试试国产轻量的 Solon v1.10.1

    相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 - 10 倍. (更快) qps 高 2- 3 倍. (更高) 运行时内存节省 1/3 ~ 1/2. (更少) 打包 ...

  2. Skywalking 8.1 Docker 服务端部署

    前置条件 Docker 安装 Elasticsearch ### 部署服务端 skywalking-oap-server docker pull apache/skywalking-oap-serve ...

  3. 未来,让我们一起想象 — “Imagine” 阿里云视频云全景创新峰会

    视频云赛道是一条极具想象力的赛道,可以变革商业与社会,成为大视频时代底座. 视频云技术是一项极具创新力的技术,可以突破时间与空间,创造一个全新的世界. 7 月 10 日,"Imagine&q ...

  4. IDEA | 使用Maven创建Web项目并配置Tomcat

    学习这种方式的原因是以后Tomcat中运行的绝大多数都是Web项目,而使用Maven工具能更加简单快捷的把Web项目给创建出来,所以Maven的Web项目具体如何来构建呢? 在真正创建Maven We ...

  5. 记一次github上传文件夹(项目)的历程和踩坑

    1.git官网登录自己的git账号(没有就自己注册一个):https://github.com/  2.首先是下载安装好git软件:https://gitforwindows.org/ (1)这里要注 ...

  6. the server responded with a status of 413 (Request Entity Too Large) 解决

    前端上传文件,本地测试好的,放到服务器上出现了这个错误:the server responded with a status of 413 (Request Entity Too Large) 问题原 ...

  7. shell脚本(1)-shell介绍

    一.shell介绍 1.什么是shell shell是c语法编写的,是用户和liunx内核沟通的桥梁,即是命令语法,也是解释性编程语言. 内核处理的都是二进制,而用户处理的都是高级语法,系统开发人员可 ...

  8. @RequestParam与@RequestBody使用对比

    转载请注明出处: @RequestParam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容. (Http协议中,如果不指定Con ...

  9. 代码使我头疼之React初学习

    前言 开始了,去年(2020)说要学的React,到现在2021年的12月底了,才来实施--(年底警告!年末总结还没开始写!) 不过前端为啥要学React呢?Vue不是很好用吗?Vue确实很好用,并且 ...

  10. [转帖]kubernetes(k8s):容器资源限制(内存限制、cpu限制、namespace限制)

    文章目录 1. k8s容器资源限制 2. 内存资源限制实例 3. cpu资源限制 4. namespace设置资源限制 5. namespace中pod的配额 6. namespace的创建.使用和删 ...