多语言展示
当前在线:351今日阅读:113今日分享:31

GIT学习--(6) GIT分离头指针详解

在上一篇经验中,我们略微提了一下GIT中一个特殊的指针 HEAD, 其指向的分支就是我们目前工作的分支,那么HEAD除了指向分支还能指向哪儿呢?分离头又是什么意思呢?这篇经验就给你答案。
工具/原料

一台安装了GIT的电脑

方法/步骤
1

首先还是要强调一下,目前我们仓库中已经有了3个分支,master、mileStone 和 showCase, 在后面的操作中,我们一定要切记先确认自己是不是工作在预想的分支上,不要犯了“路线”错误!我们先通过 git checkout master 将工作分支切换到主分支上,通过 git branch -av 可以看出 HEAD 指针目前指向 master 分支。

2

HEAD指针通常就是指向一个分支,通过 git checkout BranchName 可以切换HEAD指针指向的分支,那HEAD还能指向哪里呢? 我们知道 git checkout BranchName 命令中的 BranchName 代表一个分支的最新的一次提交记录(当前最新版本),根据我们前面的描述,一次提交记录可以通过一个40位的hash值来唯一确认,那么我从当前分支的提交历史中找一个hash值(非最新那个),然后运行命令 git checkout 某次提交hash值,会发生什么呢?

3

运行命令后,GIT给了我们一大段反馈(如上图),略微翻译一下: '仓库正处于分离头状态,你可以查看当前仓库的内容,做一些试验性的修改并提交,但是当你通过运行 git checkout 命令切换到其他分支上时,你所做的所有修改都会被抛弃!如果你认为你当前的修改有价值,需要保留,可以通过运行命令 git checkout -b NewBranchName 基于当前仓库的内容创建一个分支 。' 通过第2步操作,我们的仓库成功进入分离头的状态,运行命令 git branch -av ,可以看出我们多了一个没有名称的分支(图示),并且我们正工作在其上;运行命令 git log --all --oneline ,我们可以看到 HEAD 没有指向任何一个分支,而是孤零零的附着在一次提交记录上 (图示),这就是分离头的概念!

5

分离头部分已经介绍完了,这里我们顺带再说一点东西,那就是分支的删除,我们可以创建分支,当然也可以删除分支,命令 git branch -D BranchName 就会强制删除分支,注意:删除前一定要考虑清楚,这个命令可没有后悔药,一旦执行,该分支永久消失!图示,我们将上面通过分离头创建的分支 detachedHeadChanges 删除的效果 (注意:我们不能删除正在工作的分支本身)。

注意事项
1

分离头指针是指仓库的一种特殊状态,其上的变更必须通过创建具名分支的方式实现永久保存,否则会被遗弃

2

git branch -D BranchName 是一个危险的命令,一旦执行,分支将永久被删除

3

git branch -D BranchName 无法删除当前正在工作的分支本身,我们需要切换到其他分支来进行删除操作

推荐信息