前言

在 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. 火山引擎智能外呼联合火山引擎VeDI升级服务,让企业精准营销不再难

    企业营销模式正在经历一场巨变.数字化营销早已替代传统的营销方式,成为企业营销的主流方式和发展战略中不可或缺的部分.然而随着数字化营销的普及,市场迈入存量竞争时代,获客成本也逐年攀升.面对营销过程中不断 ...

  2. anaconda学习(未完成)

    1.Anaconda安装教程(以32.7.4为例)官网地址:https://www.anaconda.com/download(如无法下载可跳转清华源下载)下载完成后点击打开即可安装点击Next选择I ...

  3. 详解 SSL(三):SSL 证书该如何选择?

    在上一篇< 详解 SSL(二):SSL 证书对网站的好处>中,我们知道了在网站部署 SSL 证书后,不管是对网站本身还是对网站的用户都能够带来许多好处.那么随着 HTTPS 的普及,市面上 ...

  4. C# Task 多任务:C# 扩展TaskScheduler实现独立线程池,支持多任务批量处理,互不干扰,无缝兼容Task

    先上源码: https://gitee.com/s0611163/TaskSchedulerEx     为什么编写TaskSchedulerEx类? 因为.NET默认线程池只有一个线程池,如果某个批 ...

  5. 传统与现代可视化 PK:再生水厂二维工艺组态系统

    前言 随着可视化技术的进步与发展,传统再生水厂组态系统所展示的组态页面已逐渐无法满足当前现阶段多样化的展示手段.使得系统对污泥处理处置及生产运行成本方面的监控.分析方面较为薄弱,急需对信息化应用成果和 ...

  6. java中除法结果不对。

    今天遇一个非常简单地计算,计算结果居然是不对0,查了一些前辈们的资料动手实验了一下,实验结果和代码分享给大家.需要计算的公式:(7/10)*0.8 结果居然不是0.56 而是 0,最后找到原因(7/1 ...

  7. Angular系列教程之变更检测与性能优化

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  8. Clock Gating Design

    GPU max power distribution internal power and switch power - 动态功耗(时钟翻转) Leakage power - 漏电功耗(静态功耗,mo ...

  9. LaTeX 公式识别问题

    问题 想要方便的图片公式识别工具来写Latex(论文)/markdown(笔记)文件 工具推荐 1.mathpix 识别成功率最高(无论是多行,表格表现都非常良好),最好用的工具,但是收费高且付费麻烦 ...

  10. PS去除PDF中的WPS 编辑试用水印

    1. 问题 自己的学习资料.pdf被添加上了相关水印,导致阅读起来很不舒服 2. 解决方式(适用于白底黑字的pdf资料,去除水印) 2.1 初始图片如下: 2.2 打开PS,选择菜单栏中选择一项中的色 ...