我想获得可以安全删除的分支机构列表。我的问题是,有没有一种方法可以确定remotes/origin/dev
是否包含提交,而无需检查该分支?
git fetch origin;
git branch | while read branch; do
if [ "remotes/origin/dev" --contains "$b" ]; then
echo "$b";
fi
done
如何检查remotes/origin/dev
是否包含给定分支的最新提交?我可以避免先退出remotes/origin/dev
吗?
答案 0 :(得分:2)
使用:
if git merge-base --is-ancestor $b refs/remotes/origin/dev; then
echo $b
fi
但是请不要使用git branch
!请改用git for-each-ref
:
git fetch origin
git for-each-ref --format='%(refname)' refs/heads | while read b; do
git merge-base --is-ancestor $b refs/remotes/origin/dev && echo ${b#refs/heads/}
done
例如。 (这是全名,以防万一,但仍会发出缩写名。)
问题:
(对于某些分支名称/标识符 B ,包括远程跟踪名称,以及提交哈希或其他标识符 C )实际上是另一个更普遍的问题的子集由git merge-base
命令回答。
更普遍的问题是:
其中“祖先”允许平等。这是git merge-base --is-ancestor C1 C2
执行的测试。请注意,这些项目中的任何一个都可以是哈希ID或引用名称,并且结果是退出状态的一部分(足够多)。 --is-ancestor
测试是Git 1.8.0中的新功能。