병합되지 않은 Git 브랜치를 찾으십니까?


276

많은 지점이있는 Git 저장소가 있는데 그중 일부는 이미 병합되었지만 일부는 병합되지 않았습니다. 분기 수가 상당히 많기 때문에 아직 병합되지 않은 분기를 어떻게 확인할 수 있습니까? "문어"병합 및 이미 병합 된 분기를 다시 병합하지 않아도됩니다.


1
먼저 "문어 병합"이라는 용어에 대해 웃고있었습니다. 그러나 나처럼 모르는 경우 : 그것은 병합 전략의 공식 이름입니다 :-) git-scm.com/docs/git-merge 또는 atlassian.com/de/git/tutorials/using-branches/를
관찰자

답변:


462

이 시도:

git branch --merged master

주석에 표시된 내용을 수행합니다 (에 병합 된 분기를 나열 master). 다음을 사용하여 역을 끌어 올릴 수도 있습니다.

git branch --no-merged master

master예를 들어을 지정하지 않으면

git branch --merged

그런 다음 현재로 병합 된 지점을 보여줍니다 HEAD (on master인 경우 첫 번째 명령과 같고 on foo인 경우와 같습니다 git branch --merged foo).

-r플래그와 확인할 참조를 지정하여 업스트림 분기를 비교할 수도 있습니다 (로컬 또는 원격 일 수 있음).

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

5
병합하는 경우 foomaster, 그것은 나타납니다 git branch --merged master목록입니다. 그러나 한 번 더 커밋하면 어떻게됩니까 foo? 더 이상이 목록에 나타나지 않습니다, 또는 새로운 커밋에도 것처럼, 그것이, 그것을하지 않는다 1 점에 병합 master?
크레이그 오티스 (Craig Otis)

11
@CraigOtis 더 이상 목록에 나타나지 않습니다. 주어진 분기에 완전히 병합 된 --merged분기 만 나열합니다 .
Amber

그리고 gitk --remotes --not origin/master당신에게 마스터에 통합되지 않은 각 지점에 커밋을 보여줍니다.
yoyo

5
이것을 이해하고 사용하기 쉬운 자식 답변을 상상해보십시오!
jleach

1
지점을 확인하지 않고 목록을 얻는 방법이 있습니까? 서버를 가리킨 다음 목록을 얻는 것처럼?
xbmono

57

-r 매개 변수를 사용하여 master로 병합되지 않은 원격 분기를 표시 할 수도 있습니다.

git branch -r --merged master

git branch -r --no-merged

19
또는 -a원격과 로컬을 동시에 볼 수 있습니다
Simon Forsberg

1
마지막 것은 git branch -r --no-merged master입니까?
MortimerCat

28

분기가 이미 병합 된 경우 다시 병합하면 아무 작업도 수행되지 않습니다. 따라서 이미 병합 된 분기를 "병합"하는 것에 대해 걱정할 필요가 없습니다.

당신의 질문에 대답하기 위해, 당신은 단순히 발행 할 수 있습니다

 git branch --merged

합쳐진 지점을 보거나

 git branch --no-merged

병합되지 않은 가지를 볼 수 있습니다. 현재 지점이 암시되어 있지만 원하는 경우 다른 지점을 지정할 수 있습니다.

 git branch --no-merged integration

아직 integration지점으로 병합되지 않은 지점을 표시합니다 .


1

아래 스크립트는 origin/*현재 지점보다 앞서 있는 모든 지점을 찾습니다.

#!/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

최신 버전의 스크립트


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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.