1. 查看历史版本代码
例如你想看看项目在这个 commit 时是什么样子:
git switch --detach bb60a7e1fdb128316ec9cd0c9e50165fa0948d25
此时你的文件会变成那个历史版本的状态。
2. 临时测试旧版本
比如你怀疑某个 bug 是后来引入的,可以切换到旧版本运行项目:
git switch --detach bb60a7e1fdb128316ec9cd0c9e50165fa0948d25
npm run dev
看旧版本有没有问题。
3. 从旧版本拉出新分支
如果你发现这个旧版本是你想要的,可以基于它新建一个分支:
git switch -c fix-from-old-version
这样就从这个 commit 开始新建了一个正常分支。
重点:detached HEAD 有什么风险?
在 detached HEAD 状态下,你可以修改代码,也可以提交:
git add .
git commit -m "test change"
但这个提交不属于任何分支。
如果你之后直接切回其他分支:
git switch master
刚才那个提交可能会变得很难找,甚至后续被 Git 清理掉。
所以,如果你在 detached HEAD 状态下做了有价值的修改,应该马上建分支保存:
git switch -c my-new-branch
怎么回到原来的分支?
例如回到 master:
git switch master
或者回到 main:
git switch main
查看当前状态:
git status
如果看到类似:
HEAD detached at bb60a7e1
就说明你当前在游离 HEAD 状态。
一句话总结
git switch --detach <commit-id>
就是:
临时把代码切换到某个历史提交版本,用来查看、测试或从这个版本重新开分支;但它不是正常分支状态,直接提交有丢失风险。