如何从某个历史提交创建 Git 分支

从旧提交建分支:git log 找到目标提交哈希,然后 git checkout -b <新分支名> <commit哈希>;新写法是 git switch -c <分支名> <哈希>。常用于找回旧代码、从历史点修复 bug。

最佳实践
Git 提交历史与版本恢复示意

先用 git log 找到目标提交的哈希,然后执行 git checkout -b 新分支名 提交哈希(或新语法 git switch -c 新分支名 哈希)。新分支会以该提交为起点,包含它之前的全部历史。这是从旧版本拉修复分支、找回被覆盖代码的标准做法。

操作步骤

git log --oneline        # 找到目标提交,假设是 a1b2c3d

git checkout -b hotfix-from-old a1b2c3d   # 建分支并切过去
# 或新语法
git switch -c hotfix-from-old a1b2c3d

也可以用相对引用代替哈希:git switch -c bugfix HEAD~5(从 5 个提交之前建分支)。

只建分支不切换

git branch hotfix-from-old a1b2c3d

分支建好但仍停留在当前分支,适合先创建稍后处理。

典型场景

  • 热修复:线上跑的是 v1.2 的标签,直接在 tag 上建分支:git switch -c hotfix v1.2;
  • 找回误删内容:git reflog 找到丢失提交的哈希,从那里建分支恢复;
  • 二分定位后的修复:git bisect 找到引入 bug 的提交,从其父提交建分支验证。

推送到远程

git push -u origin hotfix-from-old

常见问题(FAQ)

Q:忘了哈希怎么办?

git log --oneline --graph 看历史;分支已删的话用 git reflog 找;知道大概时间可以 git log --since="2026-09-01" --oneline 过滤。

Q:从旧提交建的分支,合并回 main 会怎样?

正常 merge/rebase 都行。Git 按提交图合并,与"从哪个点分出来"无关。注意如果旧点之后的提交改动很大,合并冲突可能较多。

Q:detached HEAD 状态干了活怎么救?

在游离 HEAD 上做的提交不在任何分支上,立即 git switch -c 分支名 把这些提交固定到新分支,就不会丢。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台