比方说,我有分支master,foo和bar。
master
\--foo
|
bar
foo和bar是一回事。想象一下,foo上有一些工作,然后用户做git checkout -b bar
但从未做过任何事情。所以,他们都指向相同的树木。
现在,让我们说时间过去了,我忘记了其他分支的名称和foo一样,或者我只是想清理我的分支。
在foo分支上我需要执行什么命令才能看到指向同一树木的所有其他分支(在这种情况下只是条形图)?
如何/为何有用?好吧,因为Github上的拉取请求是可以跟踪的分支,我可以查看我坐在一个旧分支,运行此命令,并让它显示origin/pr/42
,现在我有旧拉的ID请求(42)在Github上查看它。
答案 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-ref
和rev-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]