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

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


当前回答

gitbranch--contains<ref>是最明显的“瓷”命令。如果您只想使用“管道”命令执行类似的操作:

COMMIT=$(git rev-parse <ref>) # expands hash if needed
for BRANCH in $(git for-each-ref --format "%(refname)" refs/heads); do
  if $(git rev-list $BRANCH | fgrep -q $COMMIT); then
    echo $BRANCH
  fi
done

(此SO答案的交叉点)

其他回答

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

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

要查找本地分支机构,请执行以下操作:

grep -lR YOUR_COMMIT .git/refs/heads | sed 's/.git\/refs\/heads\///g'

要查找远程分支,请执行以下操作:

grep -lR $commit .git/refs/remotes | sed 's/.git\/refs\/remotes\///g'

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

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

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

gitbranch--contains<ref>是最明显的“瓷”命令。如果您只想使用“管道”命令执行类似的操作:

COMMIT=$(git rev-parse <ref>) # expands hash if needed
for BRANCH in $(git for-each-ref --format "%(refname)" refs/heads); do
  if $(git rev-list $BRANCH | fgrep -q $COMMIT); then
    echo $BRANCH
  fi
done

(此SO答案的交叉点)

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

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