游离分支
所谓游离分支,就是处于detached状态的分支,这里显示的不是分支的名称(如,main),而是显示一串hash值:
ubun:~/work/@e9781a5 % gst
HEAD detached at e9781a5
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
这个分支就是处于游离状态,在该状态下所做的修改不会被记录。
一般我们使用以下命令进入:
git checkout ${hash}
这时我们可以编译任意历史时点的代码,如果要修改代码,还是要用稳定分支。
从游离分支到稳定分支
最简单的方式是使用:
git checkout -b stable_branch_name
这样本地分支就会新建一个名为stable_branch_name的新分支,在此分支上修改并提交即可。
submodule处于游离分支
当子模块处于游离状态时,需要分情况处理。
一般而言,下述几种情况可能导致子模块处于游离状态:
- 子模块工程已更新,并且项目中子模块也被更新,而你未更新子模块
- 项目中子模块指向了子模块工程的临时分支,但临时分支被删除(如merge后自动删除)
- 其他
对于子模块,一般我们希望切换回main即可,本地不会有修改,可以用下面的方法:
# 方法1:创建新的临时分支
git checkout -b test
git checkout main
git pull
git branch -D test # 不可恢复操作,确认test不再需要后执行
# 方法2:无条件切回mian
git fetch origin
git reset --hard origin/main
小结
进入游离分支可能是无意的,如果作了修改,就要使用checkout -b切入新分支,以免修改丢失。
其他情况,当确定不再需要该分支时,可以使用暴力手段,如删除该工程重新拉取代码即可。