前言

在 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. python WordCloud matplotlib docx 简易生成docx报告

    # encode=utf-8 import numpy as np import matplotlib.pyplot as plt from docx import Document from doc ...

  2. Bug生命周期

    新建,确认,解决,重新验证,关闭,重新打开 一个Bug由测试人员发现并提交,我们将状态标注为新建:开发人员接收了该Bug,将Bug的状态修改为已分配,表示已经认可:开发人员解决了该bug后,就将bug ...

  3. 【django-vue】 项目上线 uuid重复问题 内网穿透 支付宝验签 nginx集群 远程连接redis 使用uwsgi启动django

    目录 上节回顾 uuid重复问题 内网穿透 支付宝验签 今日内容 1 上线架构图 2 阿里云购买 3 安装git和其他依赖 4 云服务器安装mysql 5 云服务器安装redis(源码安装) 远程连接 ...

  4. Windows 系统如何完全卸载 VSCode

    0. 参考资料 Uninstall visual studio code in windows 1. 删不干净的用户数据 最近正在从 Sublime Text 3 环境切换到 VS Code,看重的是 ...

  5. 揭秘 vivo 如何打造千万级 DAU 活动中台 - 启航篇

    本文首发于 vivo互联网技术 微信公众号 链接:  https://mp.weixin.qq.com/s/Ka1pjJKuFwuVL8B-t7CwuA作者:悟空中台研发团队 vivo大厦(南京) 一 ...

  6. ios ipa包上传需要什么工具

    ​ 目录 ios ipa包上传需要什么工具 前言 一.IPA包的原理 二.IPA包上传的步骤 1.注册开发者账号 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包 ...

  7. P2234

    乐死我了,一道需要用平衡树的算法的题,在我忘了看标签的情况下下意识用了一个普及-难度的超简单思路解决了.当然其中加入了一些半骗分半贪心性质的剪枝. 总之这破算法竟然AC了就离谱,乐死我了 Code # ...

  8. 斐波拉契序列的 Go 实现

    本篇文章主要介绍斐波拉契序列的 Go 语言实现. 斐波拉契序列: 前面相邻两项之后构成后一项. 1. 循环迭代 package main import "fmt" const ma ...

  9. 每天学五分钟 Liunx 101 | 存储篇:LVM

    LVM LVM(Logical Volume Manager),逻辑卷管理器.一种高级文件系统管理方式,它可以动态扩展文件系统.   LVM 的示意图如下所示:

  10. 使用Docker部署java项目时遇到的几个错误

    0.简介 本文主要是在学习黑马程序员Docker快速入门到项目部署过程中, 对遇到的问题进行了相关的总结梳理 1.本地已存在mysql服务占用3306端口 问题 当我使用docker run -d - ...