【问题标题】:git how to find commit hash where branch originated fromgit如何找到分支起源的提交哈希
【发布时间】:2010-10-22 16:26:41
【问题描述】:

假设我从我的主分支分支到一个主题分支,然后我在我的主题分支上做了一些提交。是否有命令告诉我主分支上的提交哈希是我的主题分支的来源?

理想情况下,我不必知道我做了多少次提交(试图避免 HEAD^5)。

我已经用谷歌搜索过,但似乎无法找到答案。谢谢!

【问题讨论】:

标签: git git-branch


【解决方案1】:

您可以使用git reflog show --no-abbrev <branch name>。它将输出对分支所做的所有更改,包括它的创建,例如(我从master 分支创建了分支xxx):

bdbf21b087de5aa2e78a7d793e035d8bd9ec9629 xxx@{0}: branch: Created from master

请注意,这不是很可靠,因为 reflog 记录可能会过期(默认为 90 天),而且似乎没有 100% 可靠的方法来做到这一点。

【讨论】:

  • reflogmerge-base 在中间合并之前输出第一次提交。我的分支中有 10-15 个中间合并,但我找不到可靠的方法来获得该分支中的第一次提交。
【解决方案2】:

使用git merge-base master your-branch 查找两个分支(通常是分支点)之间的最佳共同祖先。

【讨论】:

  • @Bryce:请注意,如果您进行一些中间合并,这将为您提供最近的共同祖先,而不一定是第一个分支点。
  • 这似乎不再起作用。我刚刚得到使用信息:usage: git merge-base [-a|--all] <commit> <commit>...。我猜想在上面的命令中添加HEAD 会给出正确的答案。
  • 是否有短选项有输出? git merge-base mast my_branch | git rev-parse --short HEAD
  • @DavidSopko:不确定你的意思? git rev-parse --short $(git merge-base master my_branch) 有效吗?
  • 是的@knittl 就是这样。谢谢!
【解决方案3】:

唯一 100% 可靠的方法是在创建分支时标记分支的开头。如果您将提交合并回您创建新分支的分支,则接受的答案将不起作用。例如,如果您正在创建一个稳定的发布分支并希望将您在发布测试期间找到的修复合并回主控,有时会这样做。常做的事。如果您知道您永远不会将新分支的提交合并回原始分支,那么接受的答案将起作用。

【讨论】:

    【解决方案4】:

    如果感兴趣的分支还没有合并,就像大家说的:

    • git merge-base branch1 branch2

    如果您已合并分支(例如 topicmaster,无论哪种方式合并):

    • 查找最后一次合并发生的位置(这是所有当前答案的建议)
      • git merge-base topic master
      • 给你sha-of-last-merge
    • 查找用于合并的两个(理论上,可能更多)提交:
      • git rev-list --parents -n 1 sha1-of-last-merge
      • 给你sha-of-last-merge sha-of-parent-1 sha-of-parent-2
      • 我们对最后两个感兴趣
    • 获取父母的这两个 SHA1 并重复该过程:
      • git merge-base sha-of-parent-1 sha-of-parent-2
      • 如果您没有中间合并,这将为您提供首次创建分支的提交
      • 否则你必须不断重复
        • 这里最糟糕的是,除了查看提交消息或应用其他启发式方法之外,没有办法知道何时停止。如果你幸运的话,你最终会在 master 上提交,而不是只有一个单亲 - 这是一个自然的停止点。但是,如果您从 master 上的提交开始您的 topic 分支,该提交有多个父项(即合并提交),那么就没有运气了。需要启发式/常识/其他知识。

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 2015-06-24
      • 2013-03-18
      • 2014-11-07
      • 2017-10-17
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多