git:删除后代分支

时间:2012-10-22 18:49:18

标签: git

假设以下提交结构:

master:      A-B-C-D-E----------------
                  \                   \
branch a:          F-G-H     branch d: N-O
                      \
branch b:              I-J
                          \
branch c:                  K-L-M

我想删除从分支a下降的所有分支(在本例中为b和c)。有没有办法检测分支b和c从分支a?

下降

现在我正在考虑通过发现共同祖先(G)存在于哪个分支来实现这一目标;这将返回a,b和c;然后比较分支机构的配置时间。之后,删除除最早的分支以外的所有分支。

我想知道是否有更简洁的方法来执行此操作,如果没有,我如何检索分支创建的时间戳?

期望的结果:

master:      A-B-C-D-E----------------
                  \                   \
branch a:          F-H'      branch d: N-O

3 个答案:

答案 0 :(得分:0)

好吧,这可能不是最优雅的方式,但以下似乎可以解决问题:

git reflog <branch>

在上面的示例中,在“b”上运行此命令将返回类似的内容:

137c91f b@{0}: branch: Created from a

可以通过在与目标提交相关联的每个分支上运行此命令来重构分支树。

答案 1 :(得分:0)

我会使用一个非常小的shell脚本。

#!/bin/bash

# identify the bad commit
BAD_COMMIT=$(git rev-parse "$1")

# loop through branches
for BRANCH in $(git for-each-ref --format="%(refname)" refs/heads); do
  # detect if the branch is in the history, for which fgrep will exit 0
  if (git rev-list $BRANCH | fgrep -q $BAD_COMMIT); then
    echo "Deleting $BRANCH"
    git branch -D $BRANCH
  else
    echo "Keeping $BRANCH"
  fi
done

另请参阅:SO Answer: Iterating through branches

答案 2 :(得分:0)

1)删除分支C. 2)删除分支B. 我不确定H'是什么;我猜你想要将H提交到提交G.