前言

在 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. 限时促销,火山引擎 ByteHouse 为企业带来一波数智升级福利!

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 面对庞杂的海量数据,稳定高速的实时数据处理能力,成为了当下企业数智升级过程中备受关注的点. ByteHouse 是 ...

  2. JQuery 弹出模态窗口

    index.html <!DOCTYPE html> <html> <head> <!-- Contact Form CSS files --> < ...

  3. SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行

    MySQL 项目中 SQL 脚本更新.升级方式,防止多次重复执行 Oracle 项目中 SQL 脚本更新方式 一套代码,多家部署时,在SQL脚本升级时,通过一个SQL文件给运维,避免出现SQL执行序顺 ...

  4. 前端知识点 | 查看已登录网站 Cookie 信息

    方法一:针对 Chrome 浏览器 设置 \(\to\) 隐私设置和安全性 \(\to\) Cookie 及其他网站数据 \(\to\) 查看所有 Cookie 和网站数据 or chrome://s ...

  5. 0x42 数据结构进阶-树状数组

    A题 楼兰图腾 链接:https://ac.nowcoder.com/acm/contest/1032/A 树状数组 + 逆序对 #include<bits/stdc++.h> using ...

  6. 关于 VS Code 用户自定义代码片段的官方 $ 命令记录

    关于 VS Code 的定义用户代码片段的部分 $ 命令 TM_SELECTED_TEXT:当前选定的文本或空字符串: 注:选定后通过在命令窗口点选「插入代码片段」插入. TM_CURRENT_LIN ...

  7. 《3D编程模式》写书-第2次记录

    大家好,目前我已经完成了"拼接模式"."撤销重做模式"."ECS模式"的初稿 下面会给出它们的使用场景,如果您正好能用到,请联系我提前阅读模 ...

  8. Win10 高效语音输入方案:听写功能 win + H

    win + H 打开听写功能,即可打开语音输入,帮你快速糊完文档 (队友亲测好用)

  9. Canal使用和安装总结

    转载请注明出处: 1.定义 Canal 组件是一个基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费,支持将增量数据投递到下游消费者(如 Kafka.RocketMQ 等)或者存储(如 El ...

  10. 基于AHB_BUS SRAM控制器的设计-02

    AHB-SRAMC Design 片选信号决定哪几个memory被选择和功耗 sram_addr和sram_wdata都是可以通过AHB总线的控制信号得到的 1. sram_csn信号理解 hsize ...