You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Git中两个指定提交哈希之间的所有提交哈希(含首尾)

需求:获取Git两个提交间的全部哈希(包含首尾)

我需要列出起始提交哈希与结束提交哈希之间的所有提交哈希(包含起始和结束哈希)。以某仓库master分支提交历史为例,要获取提交哈希f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d与d4bce13a443cf12da40a77c16c1e591f4f985b47之间的提交,期望输出如下:

f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d
c286db365e7374fe4d08f54077abb7fba81dd296
0bb0526b70870d57cbac9fcc8c4a7346a4ce5879
a5a7f852e45c7cadc8d1524bd4d14a1e39785aa5
9a5c33b16d07d62651ea80552e8782974c96bb8a
d4bce13a443cf12da40a77c16c1e591f4f985b47

我试过git rev-list --reverse --remotes ^f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d^ HEAD --,结果不正确;后来用git rev-list --reverse --ancestry-path f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d..HEAD,能输出除起始提交外的所有正确结果,求正确方案并解释原理。

正确解决方案

直接调整范围匹配规则,执行以下命令即可得到包含首尾提交的完整哈希列表:

git rev-list --reverse --ancestry-path ^f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d^ d4bce13a443cf12da40a77c16c1e591f4f985b47

如果你的Git版本在2.13及以上,也可以用更直观的语法:

git rev-list --reverse --ancestry-path f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d^..d4bce13a443cf12da40a77c16c1e591f4f985b47
命令原理与筛选逻辑
  1. --ancestry-path:仅保留两个提交之间的直系祖先链,排除分支分叉出去的无关提交,确保输出的是严格从起始到结束的线性提交序列。
  2. ^<起始提交>^:Git中^符号代表排除指定提交及其所有祖先。这里起始提交^指向起始提交的父提交,排除它就意味着保留起始提交本身,以及之后所有到结束提交的提交。
    • 你之前用的起始提交..结束提交等价于^起始提交 结束提交,会直接排除起始提交本身,所以看不到第一个哈希;而起始提交^..结束提交等价于^起始提交^ 结束提交,排除的是起始提交的父提交,自然就包含了起始提交。
  3. --reverse:默认git rev-list是从最新提交往旧提交输出,加上这个参数后改为按提交时间从旧到新排序,和你期望的输出顺序完全一致。

内容的提问来源于stack exchange,提问作者not-a-bot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:45:30