给定SHA-1哈希值,是否有方法确定提交来自哪个分支?

如果你能告诉我如何使用Ruby Grit实现这一点,那就加分。


当前回答

一个穷人的选择是在HEAD上使用工具tig1,搜索提交,然后直观地从提交开始一直到看到合并提交。默认合并消息应指定要合并到的分支位置:)

1Tig是一个基于ncurses的Git文本模式界面。它的功能主要作为Git存储库浏览器,但它也可以帮助更改块级别的提交,并充当各种Git命令。

其他回答

我认为有人应该面临同样的问题,无法找到分支,尽管它实际上存在于一个分支中。

你最好先把所有东西都拔出来:

git pull --all

然后执行分支搜索:

git name-rev <SHA>

or:

git branch --contains <SHA>

作为一个实验,我制作了一个提交后挂钩,它在提交元数据中存储关于当前签出的分支的信息。我还略微修改了gitk以显示该信息。

你可以在这里查看:https://github.com/pajp/branch-info-commits

khichar.anil在回答中涵盖了大部分内容。

我只是添加了一个标志,它将从修订名称列表中删除标记。这给了我们:

git name-rev --name-only --exclude=tags/* $SHA

例如,要发现c0118fa提交来自redesign_interactions:

* ccfd449 (HEAD -> develop) Require to return undef if no digits found
*   93dd5ff Merge pull request #4 from KES777/clean_api
|\
| * 39d82d1 Fix tc0118faests for debugging debugger internals
| * ed67179 Move &push_frame out of core
| * 2fd84b5 Do not lose info about call point
| * 3ab09a2 Improve debugger output: Show info about emitted events
| *   a435005 Merge branch 'redesign_interactions' into clean_api
| |\
| | * a06cc29 Code comments
| | * d5d6266 Remove copy/paste code
| | * c0118fa Allow command to choose how continue interaction
| | * 19cb534 Emit &interact event

您应该运行:

git log c0118fa..HEAD --ancestry-path --merges

然后向下滚动以找到最后一次合并提交。即:

commit a435005445a6752dfe788b8d994e155b3cd9778f
Merge: 0953cac a06cc29
Author: Eugen Konkov
Date:   Sat Oct 1 00:54:18 2016 +0300

    Merge branch 'redesign_interactions' into clean_api

使现代化

或者只需要一个命令:

git log c0118fa..HEAD --ancestry-path --merges --oneline --color | tail -n 1

这个简单的命令就像一个符咒:

git名称rev<SHA>

例如(其中测试分支是分支名称):

git name-rev 651ad3a
251ad3a remotes/origin/test-branch

即使这样也适用于复杂的场景,例如:

origin/branchA/
              /branchB
                      /commit<SHA1>
                                   /commit<SHA2>

这里git-namerev-commit<SHA2>返回branchB。