乐趣区

关于git:使用分支Git-Checkout


本文是对 git checkout 命令的一次测试。它将会笼罩应用举例以及不太常见的边缘案例。在 Git 术语中,“checkout”的意思就是对于一种实体的不同版本之间进行切换的操作。git checkout命令能够用于三种不同的实体:文件,commit,以及分支。作为对于 checkout 含意的补充,短语“checking out”通常意味着执行git checkout 命令的这一行为。但对于本文档的大多数读者来说,checkout 操作将次要应用于分支。

checkout 分支相似于检出一个分支中的某次旧的 commit;然而,新的变更会被存储在我的项目的历史中,这也就意味着这并不是一个只读的操作。

检出分支

git checkout命令能够切换通过 git branch 命令创立的分支。checkout 一个分支,会更新以后的工作空间中的文件,使其与检出分支的 commit 版本情况保持一致。这之后工作区中的所有变更都会被记录在 checkout 进去的那个分支上。这一操作能够认为是在筛选你心愿批改的工作分支。

相比于 SVN 的工作流,为每一个新性能的开发都建设一个独立的分支是一个微小的提高。这一个性足以在不必害怕毁坏现有性能的前提下随便试验新的性能开发,还能够让同一个开发者并行开展多个互不相干的新性能开发。甚至,这种简略又轻松的分支模型,还促成了不少合作的工作流程的呈现。

git checkout命令有时候会跟 git clone 命令相混同。两个命令中最为显著的差异在于,git clone用于从近程仓库获取代码,而 git checkout 则用来在本地零碎中业已存在的代码库中切换不同的版本。

应用:现有的分支

构想你正在工作的仓库中含有一些现有分支,那么你能够应用 git checkout 命令在这些分支之间进行切换。为了找出哪些分支是可用的,以及以后咱们正在应用哪个分支,能够执行 git branch 命令

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

下面的例子演示了如何应用 git branch 命令来查看所有可用分支,以及如何切换到一个指定的分支,在此例中,即切换到 feature_inprogress_branch 分支下来。

创立新分支

git checkout常与 git branch 合作。git branch命令能够用于创立一个新的分支。当你心愿开始某个新性能的开发,能够应用 git branch new_branch 来创立新的分支。一旦创立实现,就能够持续应用 git checkout new_branch 来切换到这个新创建好的分支。此外,git checkout命令还承受一个 -b 参数,作为创立分支并立即切换到新分支这一系列操作的快捷方式。在创立了一堆新分支之后,则能够持续应用 git checkout 命令在这些分支之间进行切换,以便并行地对多个新性能开展同步开发工作。

git checkout -b 

以上命令同时创立并 checkout 到 <new-branch> 上。-b选项作为一个标记通知 git 先运行 git branch 命令而后再运行 git checkout <new-branch> 命令。

git checkout -b  

默认的 git checkout -b 命令会从以后所在的 HEAD 指针所指的分支来派生出新建的分支。但 git checkout 命令依然能够承受一个可选的分支名作为参数。在下面的例子中,<existing-branch> 作为这个参数传递给 git checkout 命令,这一命令意味着从指定的 existing-branch 分支派生创立了一个名为 new-branch 的新分支。

切换分支

切换分支命令是一个十分直白的操作。执行上面命令会让 HEAD 指针指向 <branchname> 分支的顶端。

git checkout 

Git 会在 reflog 中记录 checkout 操作的历史。你能够执行 git reflog 命令来查看这一历史记录。

checkout 一个近程分支

与别人合作的状况下则肯定会波及到应用近程仓库。这些近程仓库可能是托管在一个共享节点上,也可能就是其余共事的一个本地仓库。每个近程仓库都有本人的分支汇合。为了可能 checkout 出某一个近程仓库的分支,咱们须要先 fetch 那个仓库的内容。

git fetch --all

之后在较新版本的 Git 中,你就能够像 checkout 本地分支一样 checkout 出这个近程分支了。

git checkout 

对于比拟老的 Git 版本,则须要先基于 remote 中的指定近程分支创立一个新分支。

git checkout -b  origin/

此外,你还能够 checkout 一个本地分支,而后将其硬重置为近程分支的最新 commit。

git checkout -b 
git reset --hard origin/

游离状态的 HEADS

在咱们曾经见识到 git checkout 命令对于分支的三大次要操作之后,当初该到了讨论一下“游离状态的 HEAD”的问题了。再次明确一下,HEAD是 Git 中用来援用以后快照的指针。在 Git 外部,git checkout命令只是简略地将 HEAD 指针更新为指向特定分支或者 commit。当它指向一个分支时,没什么问题,然而当你 checkout 了一个特定的 commit,就会将 HEAD 指针变成一个游离的指针状态。

当进入这种游离状态时,Git 会正告你以后处于游离状态,你所做的任何更改也都游离于你整个我的项目的开发流程。如果你执意要在游离状态发展新的批改,这些批改将不会被容许再合并回任何分支。而后当你没有方法只能切换到其余分支时,这部分批改也无奈被带回到新的分支

重点在于,开发工作应该始终产生在一个分支上——而不是一个游离状态的 HEAD 上。谨记这一准则能够保障你的变更提交永远都能找到。当然,如果你只是为了去看看某一个过来的提交,则无所谓是否处于游离状态。

总结

本文重点是对于应用 git checkout 命令进行分支的切换。总而言之,针对分支应用 git checkout 命令,会切换以后的 HEAD 指针指向。它还可用于创立分支,切换分支,checkout 近程分支。git checkout命令对于 Git 我的项目的操作来说是至关重要的。能够认为它与 git merge 命令是一体两面。git checkout命令和 git merge 命令联合在一起应用才使得一系列简单而又精妙的 git 工作流程 成为可能。

退出移动版