git reflog show 能查看分支创建记录,但需先切换到目标分支执行,否则无法显示其创建动作;可靠方式是查找“checkout: moving from 源分支 to 目标分支”记录,而非依赖可能缺失的“created from”条目。

git reflog show 能看到分支创建记录,但有前提
必须在目标分支上执行,否则看不到该分支的创建动作。比如想查 feature/login 是从哪拉的,得先 git checkout feature/login,再运行:git reflog show feature/login | grep "Created from"
常见错误是直接在 main 上查,结果为空——reflog 是每个分支独立的日志,不是全局历史。
checkout 记录比 Created from 更可靠
很多环境里 Created from 条目根本不会出现,尤其用 GUI 工具或 CI 自动建分支时。更通用的办法是看 checkout 切换记录:git reflog show --date=local feature/login | grep "checkout: moving from"
输出类似:feature/login@{0}: checkout: moving from main to feature/login
这行就说明它源自 main。注意:这里 moving from 后面的分支名才是母分支,别看反了。
git merge-base 可辅助定位最近共同祖先
当 reflog 被清理过、或者分支创建很久远,reflog 可能只保留最近几十条,这时可以借助拓扑关系推断:git merge-base feature/login main
如果返回一个 commit ID,说明 feature/login 和 main 有共同祖先;再配合 git log --oneline -n 5 main 和 git log --oneline -n 5 feature/login 对比前几条提交,往往能发现分叉点。这个方法不保证 100% 准确,但比瞎猜靠谱。
图形化查看分支分叉点最直观
终端里跑一次这个命令,基本不用猜:git log --graph --oneline --decorate --all --simplify-by-decoration
关键点:
• --simplify-by-decoration 过滤掉无关提交,只留带分支标签的节点
• 分叉处那个同时被两个分支指向的 commit,大概率就是源头
• 如果看到 feature/login 是从 develop 拉出后又合并过 main,那最初来源还是 develop,别被后续合并干扰判断
真正难的不是命令怎么写,而是团队没统一建分支习惯——有人用 git checkout -b,有人用 VS Code 点出来的,有人从 CI 模板生成,这些操作产生的 reflog 记录质量差异很大。所以最保险的方式,是把来源写进分支命名里,比如 feat/login-from-main-20260420,或者在 PR 描述第一行固定写 source: main。











