簡體   English   中英

列表分支未合並到其上游

[英]List branches not merged to their upstream

我想要一個類似於git branch的命令,它將列出所有與其上游合並的本地分支。

這是git branch知道的,因為git branch -d <branch-name>對於未合並的分支將失敗。

你在找這個:

git branch --no-merged

上面的命令將列出所有未合並到當前分支的分支。 如果你需要檢查其他分支那么

git branch --no-merged master

您還可以通過指定-r標志和要檢查的ref來比較上游分支,可以是本地或遠程:

git branch -r --no-merged origin/master

據我所知,沒有單一的內置Git命令列出其上游分支后面的所有本地分支(如果有的話)。 但是,您可以使用現有的Git命令實現所需的功能。 見下文。

腳本

#!/bin/sh

# git-bbu.sh
#
# List the local Branches Behind their Upstream branch, if any.
#
# Usage: git bbu
#
# To make a Git alias called 'bbu' out of this script,
# put the latter on your search path, and run
#
#   git config --global alias.bbu \
#       '!sh git-bbu.sh'

if [ $# -ne 0 ]; then
    printf "%s\n\n" "usage: git bbu"
    exit 1
fi

git for-each-ref --format='%(refname:short)' refs/heads | \
    while read ref; do
      if (git rev-parse --verify --quiet "$ref"@{upstream} &&
          ! git diff --quiet "$ref"..."$ref"@{upstream}) \
              >/dev/null 2>&1; then
        printf "%s\n" "$ref"
      fi
    done

說明

git for-each-ref --format='%(refname:short)' refs/heads

列出所有本地分支(為什么不在這里使用git branch ?因為,在腳本中,你應該嘗試使用管道Git命令而不是瓷器命令)。 將它傳遞給while循環,對於每個這樣的本地分支,

  • 使用,檢查本地分支是否有上游分支

     git rev-parse --verify --quiet "$ref"@{upstream} 
  • 使用(邏輯否定)檢查本地分支是否在其上游分支之后

     git diff --quiet "$ref"..."$ref"@{upstream} 

如果兩個條件都已驗證,請打印分支的名稱。

參考

git for-each-ref有一個“上游”字段,可以顯示分支是否與其上游最新。 然后,您可以過濾其輸出以僅顯示其上游之前的輸出:

$ git for-each-ref --format='%(upstream:trackshort)..%(refname:short)' | awk -F '\\.\\.' '$1~/>/{print $2}'

這會跳過沒有上游的分支,如果不是你需要的話,修改過濾器( $1為空,然后在awk記錄中)。 ".."用於分隔符,因為您不能在引用名稱中包含序列

暫無
暫無

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

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