2011-09-15 2 views
2

정상적인 패턴은 마스터에서 분기하는 것입니다. 많은 작업을 수행 한 다음 rebase 및 git svn dcommit을 수행하십시오. 오래된 모든 가지를 어떻게 청소할 수 있습니까?이미 커밋 된 자식 분기를 제거하십시오.

기본적으로 메시지에 git-svn-id:git branch -D이있는 지점을 찾고 싶습니다.

참고 : git branch --no-color --no-track --merged은 나를 가장 많이 얻습니다. 그러나 내가 미친 자식 - svn 버그로 인해 git fetch -f이 필요한 상황에 빠지면 직접 가서 모든 브랜치를 리베이스해야합니다.

+0

커밋 메시지에 모든 브랜치에 git-svn-id가 있어야하는 것은 아닌가? 또는 최신 커밋을 언급하고 있습니까? – prusswan

+0

그래, HEAD는 병합되었을 경우'git-svn-id' 만 가질 것입니다. –

+0

괜찮습니다. 그런 다음 배치 파일을 사용하여 로컬 브랜치를 나열하고 해당 조건을 검사 해 보겠습니다. 오히려 위험하기 때문에 아마도 삭제를 별도로 수행 할 것입니다. – prusswan

답변

0

일종 오브 한 라이너이 안된 것을

git for-each-ref --format='%(refname:short)' refs/heads | 
while read branch; do 
    if git show -s $branch | grep 'git-svn-id:'; then 
     git branch -D $branch 
    fi 
done 

참고; 나는 git-svn을 사용하지 않고 단지 두 번째 단락의 요구 사항을 기반으로합니다. git branch -D 대신 에코를 사용하여 먼저 시도해 볼 수도 있습니다. 그러면 브랜치 목록이 예상대로 표시됩니다. 필요에 따라 수정할 수 있습니다.

+0

완벽하게 작업했습니다. .gitconfig에 포함시키기 위해 포맷 할 수있어서'git gcbr'을 할 수 있고 내 브랜치를 정리할 수 있습니까? –

+0

@PaulTarjan : 실제로 중요한 것은 무엇이든, 경로의 어딘가에있는 'git-gcbr'이라는 스크립트에 넣어 두는 것이 좋습니다. 그러면 실제로 나중에 읽고 편집 할 수 있습니다. 또한 조심스럽게 진행하려는 경우 드라이 런/포스 옵션 추가와 같은 작업을 더 쉽게 수행 할 수 있습니다. (아니면 그냥 브랜치 이름을 반향시키고, 검사하고,'xargs git branch -D'로 파이프 할 수 있습니다.) – Cascabel

관련 문제