找出集成分支是否包含本地分支的尖端

时间:2018-08-17 21:05:04

标签: git git-branch

我想获得可以安全删除的分支机构列表。我的问题是,有没有一种方法可以确定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吗?

1 个答案:

答案 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?

(对于某些分支名称/标识符 B ,包括远程跟踪名称,以及提交哈希或其他标识符 C )实际上是另一个更普遍的问题的子集由git merge-base命令回答。

更普遍的问题是:

  • 提交C1是提交C2的祖先吗?

其中“祖先”允许平等。这是git merge-base --is-ancestor C1 C2执行的测试。请注意,这些项目中的任何一个都可以是哈希ID或引用名称,并且结果是退出状态的一部分(足够多)。 --is-ancestor测试是Git 1.8.0中的新功能。