Birleştirilmemiş Git dalları mı buldunuz?


276

Birçok şubesi olan bir Git depom var, bazıları zaten birleştirilmiş, bazıları değil. Şube sayısı oldukça fazla olduğundan, hangi şubelerin henüz birleştirilmediğini nasıl belirleyebilirim? Zaten birleştirilmiş bir "ahtapot" birleştirme ve yeniden birleştirme yapmak zorunda kalmaktan kaçınmak istiyorum.


1
Önce "ahtapot birleştirme" terimi hakkında gülüyordum. Ancak bilmemeniz durumunda, benim gibi: Birleştirme stratejisinin resmi adı :-) Bkz. Git-scm.com/docs/git-merge veya atlassian.com/de/git/tutorials/using-branches/ birleştirme stratejisi
gözlemci

Yanıtlar:


462

Bunu dene:

git branch --merged master

Kalayda söylediklerini yapar (birleştirilen dalları listeler master). Tersi ile aşağıdakileri de çekebilirsiniz:

git branch --no-merged master

Belirtmezseniz master, örneğin ..

git branch --merged

o zaman size akımla birleştirilen dalları gösterecektir HEAD(eğer öyleyse master, ilk komuta eşdeğerdir; eğer açıksanız, fooeşdeğerdir git branch --merged foo).

Ayrıca -r, yerel veya uzak olabilen bayrağı ve kontrol edilecek bir ref belirterek yukarı akış dallarını karşılaştırabilirsiniz :

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

5
Eğer birleştirirseniz fooiçine master, o görünecektir git branch --merged masterlistede. Fakat bir kez daha taahhüt ederseniz ne olur foo? Artık bu listede görünmüyor mu yoksa yeni taahhütleri olmasına rağmen bir noktada birleştirildi mastermi?
Craig Otis

11
@CraigOtis Artık listede görünmeyecek. --mergedyalnızca verilen dalla tamamen birleştirilen dalları listeler .
Amber

ve gitk --remotes --not origin/mastermaster için birleştirilmemiş her daldaki taahhütleri gösterecektir.
yoyo

5
Bunu hayal edin ... anlaşılması ve kullanımı kolay bir git cevabı!
jleach

1
Şube bakmadan listeyi almanın bir yolu var mı? Sunucuya işaret etmek ve sonra listeyi almak gibi?
xbmono

57

Master ile birleştirilmeyen uzak dalları göstermek için -r parametresini de kullanabilirsiniz:

git branch -r --merged master

git branch -r --no-merged

19
ya da -ahem uzak hem de yerel görmek için
Simon Forsberg

1
Sonuncusu git branch -r --no-birleştirilmiş master olmalı mı?
MortimerCat

28

Bir şube zaten birleştirilirse, tekrar birleştirmek hiçbir şey yapmaz. Bu nedenle, önceden birleştirilen "yeniden birleştirilen" dallar konusunda endişelenmenize gerek yoktur.

Sorunuzu cevaplamak için,

 git branch --merged

birleşmiş dalları görmek veya

 git branch --no-merged

birleştirilmemiş dalları görmek için. Geçerli dalınız ima edilir, ancak isterseniz diğer dalları da belirtebilirsiniz.

 git branch --no-merged integration

henüz integrationşubeye birleştirilmemiş dalları gösterir .


1

Aşağıdaki komut dosyası origin/*, geçerli dalın önündeki tüm dalları bulacaktır

#!/bin/bash

CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)

echo -e "Current branch: \e[94m$CURRENT_BRANCH\e[0m"
echo ''

git branch -a | grep remotes/origin/ | while read LINE
do
    CMD="git diff --shortstat remotes/origin/${CURRENT_BRANCH}...${LINE}"

    if $CMD | grep ' file' > /dev/null; then
        echo -e "\e[93m$LINE\e[0m" | sed 's/remotes\/origin\///'
        $CMD
        echo ''
    fi
done

Komut dosyasının güncel sürümü


0
Below script will fetch you unmerged branches and write results in .xls file 
#!/usr/bin/env bash
echo "getting list of unmerged_branches from the remote"
file_name=unmerged_branches.xls`enter code here`
current_time=$(date "+%Y.%m.%d-%H.%M.%S")
for branch in `git branch -r --no-merged | grep -v HEAD`;
do echo -e `git show --format="%cd  \\t%cr  \\t%ae" $branch | head -n 1` \\t$branch; 
done | sort -r >> $current_time.$file_name
echo "result is writtein in ";
echo $current_time.$file_name;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.