• 欢迎来到想想君的青玉案!
  • 欢迎来到我的酒馆,伙计!搓炉石的朋友请加我账号DarrenDing#5404,嘎嘎~

Git 分离头指针状态检出不当导致代码不见的问题

Git Darren Ding 182次浏览 1个评论

Git血泪史

前些日子,在项目的攻坚战中,发生了惨绝人寰的一幕!博主鏖战数天,经营数夜的代码,因为一个错误的git操作而付诸东流。

情景再现:

  1. 项目目前处在分支A上的某提交A[n](提交ID:a6a7ced)节点上。
  2. 此时部分核心代码被改坏了,所以博主想回到分支A前面的某个提交A[i](提交ID:309ddea)节点上。
  3. 博主“娴熟地”执行检出(check out)操作到A[i]节点上,信心满满开始新一轮的编码。
  4. 几天后,即将大功告成之际,项目处在提交X(提交ID:7d198f6)节点上。
  5. 此时,博主发现需要用到A[n]节点上的一些代码,博主再次“娴熟地”执行检出操作返回至A[n]节点上。
  6. 博主拷贝拷贝需要的代码,准备返回节点X粘贴之际,博主懵逼了。纳尼!X节点所在的整条“分支”链不见了!!!
  7. 。。。博主递归懵逼中。。。博主在哭泣。。。博主已下线。。。

针对上面的情景,博主做了一个小测试:

check_out

情景1-3:由节点A[n]检出至A[i]提交

detached_HEAD_state2

情景4:节点X处于分离HEAD状态

check_out_back

情景5-7:由节点X检出切换至A[n](X神秘消失!)

小插曲:其实当时临近凌晨4:00钟,本宝宝打算收工后赶5:30回家的火车。眼神是暗淡的,表情是麻木的,心理是崩溃的~

谁的锅?

当时博主很愤懑道:“什么辣鸡破软件(Git GUI客户端)!还我代码!”

博主使用的Git GUI软件是SourceTree,一款免费的Git & Mercurial客户端,支持Windows和Mac平台。博主选择此软件基于以下几点:颜值高,简洁方便,支持多平台,免费。

那么问题来了:到底是软件本身的锅,还是自己操作不当的锅?

经过和朋友(FreeStyle)的探讨、相关资料的查询以及情景的再现,博主承认自己的愚蠢并为此买单。

致命的错误:当有提交A[n]检出至A[i]时,博主忽视了一个提醒对话框,如下:

detached_HEAD_state

分离头指针状态提醒

宝宝买单

分析一下原因,关键在于分离头指针状态(”detached HEAD” state),即HEAD头指针指向了一个具体的提交ID,而非一个分支。

detached_HEAD_state-分离头指针状态

分离头指针状态-“detached HEAD” state

就前面描述而言,当项目由节点A[n]检出至检点A[i]时,仓库的工作区处在“分离头指针状态”,也就是不在任何一个分支上。在此状态下做的任何更改,在检出时不会被保存!前面所说的节点X所处的“分支”链,就处在分离头指针状态,所以检出至A[n]时整条“分支”链都不见了(注意:其实不是“分支”哦)。

一种可行的解决方案:当处于分离头指针状态时,新建一个分支进行测试或开发,之后再合并分支。这样,就可以防止从分离头指针状态检出到其他分支时代码不被保存的问题。下面是博主做的小测试截图(注意切换到原来分支新的代码还在哦!):

new_branch

处在新建分支上

switch_among_branches

切换到原来分支

心情札记

吃一堑,长一智。遇到类似的问题时,切记:不要像博主一样轻易怀疑工具有问题!先从自身操作找病根吧,多和大神和内行交流,查阅网络资源,方可事半功倍。

喜欢 (5)
[187****3312]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. Now that I think about it, downtown LA is over 4 already for regular. Given how quickly we went from 3 to 4, you're probably right about it being closer to 5 than 4 coming soon. Also, don't forget that they have to jack up the prices really high in Jul Aug Sep Oct, so that they can come down significantly just in time for the election. When you factor that in, then late summer $5+ gallon gas doesn't seem unnblsoraeae...
    Zeal2017-01-13 11:12 回复