Close

git checkout

本页面检查 git checkout 命令。它将涵盖用法示例和边缘案例。用 Git 的术语来说,"checkout" 是在目标实体的不同版本之间切换的行为。git checkout 命令在三个不同的实体上运行:文件、提交和分支。除了 "checkout" 的定义外,"checking out" 一词通常用于暗示执行 ggit checkout 命令。在撤销变更主题中,我们看到了如何使用 git checkout 来查看旧提交。本文档的大部分重点将放在分支的签出操作上。

签出分支与签出旧的提交和文件类似,因为工作目录会更新以匹配选定的分支/修订版本,但是,新的变更保存在项目历史记录中,也就是说,这不是只读操作。


签出分支


git checkout 命令允许您在 git branch 创建的分支之间导航。签出分支会更新工作目录中的文件以匹配存储在该分支中的版本,并告诉 Git 记录该分支上的所有新提交。可以把它看作是选择您正在开发哪个开发领域的一种方式。

与传统 SVN 工作流程相比,为每个新功能设立一个专门的分支是一个巨大的转变。它使得尝试新实验而不必担心破坏现有功能变得非常容易,并且可以同时开发许多不相关的功能。此外,分支还促进了多个协作工作流程。

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

控制台窗口
相关资料

高级 Git 日志

Bitbucket 徽标
查看解决方案

了解 Bitbucket Cloud 的 Git

用法:现有分支


假设您正在使用的代码存储库包含预先存在的分支,您可以使用 git checkout 在这些分支之间切换。要找出哪些分支可用以及当前分支的名称,请执行 git branch

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

上方示例演示了如何通过执行 git branch 命令查看可用分支列表,以及如何切换到指定分支,在本例中为 feature_inprogress_branch

新分支


git checkoutgit branch 配合使用。git branch 命令可用于创建新分支。当您想启动一个新功能时,可以使用 git branch new_branchmain 分支外创建一个新分支。创建后,您可以使用 git checkout new_branch 切换到该分支。此外,git checkout 命令会接受一个 -b 参数,该参数可作为一种便捷的方法,用于创建新分支并立即切换到该分支。通过使用 git checkout 在分支之间切换,您可以在单一存储库中使用多个功能。

git checkout -b <new-branch>

上面的示例同时创建和签出 -b 选项是一个方便标记,它告诉 Git 在运行 git checkout 之前运行 git branch

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

默认 git checkout-b 会将 new-branch 建立在当前 HEAD 的基础上。可以向 git checkout 传递一个可选的附加分支参数。在上面的示例中,传递了 <existing-branch>,然后根据 existing-branch 而不是当前的 HEAD 作为 new-branch 的基础。

切换分支


切换分支是一项简单的操作。执行以下命令会将 HEAD 指向 的尖端。

git checkout <branchname>

Git 在 reflog 中跟踪签出操作的历史记录。您可以执行 git reflog 来查看历史记录。

Git 签出远程分支


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

git fetch --all

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

git checkout <remotebranch>

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

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

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

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

游离的 HEAD


既然我们已经了解了 git checkout 在分支上的三个主要用途,那么讨论 “detached HEAD” 状态非常重要。请记住,HEAD 是 Git 引用当前快照的方式。在内部,git checkout 命令只会将 HEAD 更新为指向指定分支或提交。当其指向分支时,Git 不会理会,但当您签出提交时,则会切换至 “detached HEAD” 状态。

这是一个警告,告诉您,您所做的一切都与项目开发的其余部分“游离”。如果您要在游离的 HEAD 状态下开始开发某个功能,那么您就无法再重新开发分支。当您必须要签出另一个分支(例如,合并您的功能)时,就没有办法引用您的功能了:

附着的头部与游离的头部

关键是,您的开发应该始终在分支上进行,永远不要在游离的 HEAD 上进行。这可以确保您始终可以引用您的新提交。但是,如果您只是在看一个旧提交,那么您是否处于游离的 HEAD 状态并不重要。

摘要


本页重点介绍了在更改分支时 git checkout 命令的用法。总而言之,在分支上使用 git checkout 时,会改变 HEAD 引用的目标。该命令可用于创建分支、切换分支和签出远程分支。git checkout 命令是标准 Git 操作的必备工具。它与 git merge 对应。git checkoutgit merge 命令是启用 git workflows 的关键工具。


分享此文章
下一主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

人们通过满是工具的墙进行协作

Bitbucket 博客

Devops 示意图

DevOps 学习路径

与 Atlassian 专家一起进行 Den 功能演示

Bitbucket Cloud 与 Atlassian Open DevOps 如何协同工作

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up