簡體   English   中英

git:刪除后代分支

[英]git: deleting a descendant branch

假定以下提交結構:

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

好吧,這未必是最優雅的方式,但下面似乎這樣的伎倆:

git reflog <branch>

在上面的示例中,在“ b”上運行此命令將返回類似的結果:

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

它可以通過對相關的目標每一個分支提交運行此命令重建分支樹。

我會使用一個非常小的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答案:遍歷分支

1)刪除分支C 2)刪除分支B我不確定H'是什么; 我猜你想把提交H壓縮到提交G中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM