如何找到指向同一树木的所有头部

时间:2013-12-23 19:21:36

标签: git github

比方说,我有分支master,foo和bar。

master
  \--foo
      |
     bar
foo和bar是一回事。想象一下,foo上有一些工作,然后用户做git checkout -b bar但从未做过任何事情。所以,他们都指向相同的树木。

现在,让我们说时间过去了,我忘记了其他分支的名称和foo一样,或者我只是想清理我的分支。

在foo分支上我需要执行什么命令才能看到指向同一树木的所有其他分支(在这种情况下只是条形图)?

如何/为何有用?好吧,因为Github上的拉取请求是可以跟踪的分支,我可以查看我坐在一个旧分支,运行此命令,并让它显示origin/pr/42,现在我有旧拉的ID请求(42)在Github上查看它。

3 个答案:

答案 0 :(得分:1)

git log --all --simplify-by-decoration --pretty=format:'%T %h %d %s' \
| awk '
     $3~/,/        { seen[$1]=2 }         # late addition to handle same-commit refs
     ++seen[$1]==1 { save[$1]=$0; next }
       seen[$1]==2 { print save[$1] }
                   { print }
'

答案 1 :(得分:1)

git惯用方法是使用for-each-refrev-parse来查找共享树的所有引用。例如,假设bash为shell:

git for-each-ref --format="%(refname)" | \
xargs -I refname \
  sh -c '[[ $(git rev-parse HEAD^{tree}) == $(git rev-parse refname^{tree}) ]] && echo refname'

这将列出所有引用,包括共享树的远程引用。

以下是示例输出:

$ git branch foo
$ git for-e...
refs/heads/foo
refs/heads/master
refs/remotes/origin/master
$ git checkout foo
$ git branch bar
$ git for-e...
refs/heads/bar
refs/heads/foo
refs/heads/master
refs/remotes/origin/master
$ echo “new content” >> README && git add README && git commit –m “New tree-ish”
$ git for-e...
refs/heads/foo

答案 2 :(得分:0)

这可能不是什么花哨但我会得到我目前正在进行的提交的哈希值 像这样的例如

git log -1 --oneline

然后取哈希并执行

git branch --all --contains [hash]