×

git checkout命令详解

git checkout命令详解(如何理解git checkout)

admin admin 发表于2023-04-21 18:59:03 浏览84 评论0

抢沙发发表评论

本文目录

如何理解git checkout

checkout的意思,是检出
我们一般的理解是使用这个命令切换分支,其实它的本质操作就是:
将当前版本库中的某个版本检出到工作区。
所以一般使用这个命令切换分支之前,要确保工作区是clean的,没有用户未保存的修改,否则会被其他版本的内容覆盖掉!当然,当工作区不是clean,git也不会真正执行git checkout的操作,会提醒你做clean的操作。
理解了git checkout,你就知道,git checkout后面不仅仅可以跟踪分支
还可以跟任何的commit HASH值,只要对应仓库中的一个提交commit就可以
当你修改了一些文件,不想保存提交,想取消掉怎么办?
这个时候,你就可以使用git checkout file
git会把仓库里原始的版本检出到工作区,覆盖掉之前你的修改,这样就达到了你丢掉掉修改的目的了。
总结:
git checkout branch 切换分支,在切换分支之前,确保工作区是清洁的。
git checkout file 使用仓库里版本覆盖掉当前工作区的文件--》相当于取消掉你当前工作区的修改

git checkout 有什么用

  在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。

  (一)基础——千里之行,始于切糕(checkout)

  先熟悉下常用操作,创建分支和切换分支,也可以称为检出分支。

  首先我们新建一个仓库gitTest,然后新建文件a,为什么要用a命名呢,这里是故意为之,后面为大家揭晓分支。呵呵。或许下面的介绍会有些枯燥乏味,因为您已经对这些命令烂熟于胸,而且运用得相当熟练,那么您可以直接跳过这一步。

  在master分支上,做一次提交c1,然后现在新建一个分支a,并切换到a分支。

  这个操作主要会用到两个命令:

  创建新分支:git branch branchName

  切换到新分支:git checkout branchName

  然后 ,上面两个命令也可以合成为一个命令:

  git checkout -b branchName

  (二)真相——HEAD是checkout的灵魂

  其实,我们在切换分支,和新建分支的时候,有没有想过,这些操作操作背后的工作原理是怎样的呢?最大的功臣就是.git目录下的HEAD引用,她宛如一个芭蕾舞者,从一个分支飘逸的跳到另一个分支,虽无声无息,却精准无比。

  在我们身处master分支的时候,您一定很好奇,当前的HEAD的内容是什么?不妨来看看吧。

  我们看到c1的提交hash值和HEAD对应分支master的当前hash值是一样的。也就是说,HEAD指向的是当前分支名master,而master又对应了当前的最新的一次提交ID.

  好,那么我们再做一次提交,看看master对应的hash值有无变化。

  从上图,我们可以不难看出,HEAD对应的ref没有变化,还是master,但是master对应的commit ID却变成了c2对应的commit ID,即更新为最后一次提交的ID咯。

  现在,提交一次的原理,我们已然了解,那么切换分支的时候呢??

  现在我们身处master分支,然后我们切换到a分支,看看会发生什么样的情况吧。

  从上图分析,在master分支上的时候,HEAD指向的是master,对应的是c2的commit ID。而切换到a分支的时候,HEAD也相应的指向了a,同时a对应的是a分支上的最新commit ID。因此,我们可以得出结论,在切换分支的时候,HEAD也会相应的指向对应的分支引用。

  但是,使用checkout命令的时候,并不是每次都会改变HEAD指针的指向哦。在什么情况下HEAD一直坚定不移的拥护者他的女神呢?可谓衣带渐宽终不悔,长使英雄泪满襟啊!让我们接着往下看。

“git checkout“与“git reset“有什么区别

git reset用于撤销操作。 

git reset [--hard | --mixed | --soft] [《commit》] 

--hard 会执行下图中操作123,参数hard会同时改变版本库的HEAD引用指向,缓存区内的内容,以及工作空间的内容,执行之后HEAD引用会指向commit指向的版本,同时缓存区内的内容也会以版本库HEAD指向的版本进行刷新,工作空间内的内容也会以HEAD引用指向的代码版本进行替代。

--mixed 会执行下图中操作12 在该参数的情况下,工作空间内的内容不会被刷新,只会更新HEAD引用的指向以及缓存区的内容 

--soft 会执行下图中操作1 只会改变HEAD引用的指向

git checkout一般用于切换分支,也可以用来回退代码

git checkout branchName切换分支到指定的分支上,使用的时候,需要注意,使用该命令工作空间下的内容会被指定的分支内容覆盖,在之前分支上面所做的没有提交的变动会丢失。 如果需要新建一个分支并使用新的分支,我们可以使用git checkout -b dev,这样我们就新建了一个名为dev的分支,并切换到该分支下面。 

该命令默认以HEAD引用来创建分支,需要需要使用指定的版本号来创建分支,可以在后面跟上版本号。

git checkout与git reset有啥区别吗

git checkout -- file;撤销对工作区修改;这个命令是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file;这个命令改变的是工作区
git reset HEAD -- file;清空add命令向暂存区提交的关于file文件的修改(Ustage);这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化