카테고리 보관물: git

git

현재 지점을 제외한 모든 로컬 지점을 삭제할 수 있습니까? 싶습니다. $ git branch …하지만

출력에 나열된 모든 분기를 삭제하고 싶습니다.

$ git branch

…하지만 한 단계로 현재 분기를 유지 합니다 . 가능합니까? 그렇다면 어떻게?



답변

@pankijs 답변에 따라 두 개의 git 별칭을 만들었습니다.

[alias]
    # Delete all local branches but master and the current one, only if they are fully merged with master.
    br-delete-useless = "!f(){\
        git branch | grep -v "master" | grep -v ^* | xargs git branch -d;\
    }; f"
    # Delete all local branches but master and the current one.
    br-delete-useless-force = "!f(){\
        git branch | grep -v "master" | grep -v ^* | xargs git branch -D;\
    }; f"

추가 예정 ~/.gitconfig


그리고 @torek이 지적했듯이 :

소문자 -d는 “완전히 병합되지 않은”분기를 삭제하지 않습니다 (문서 참조). 을 사용 -D 하면 이러한 분기가 삭제 됩니다. 이로 인해 커밋이 “손실”되는 경우에도 마찬가지입니다. 이 방법을 사용 하면 분기 리플 로그도 삭제되므로 일반적인 “실수로 인한 삭제에서 복구”항목도 작동하지 않습니다.

기본적으로 -force중요한 것을 잃지 않을 것이라고 300 % 확신하지 않는다면 절대로 버전을 사용하지 마십시오 . 영원히 잃어 버렸기 때문 입니다.


답변

$ git branch | grep -v "master" | xargs git branch -D

마스터를 제외한 모든 브랜치를 삭제합니다 (마스터를 유지하려는 브랜치로 교체하지만 마스터는 삭제됩니다)


답변

먼저 (유지하려는 브랜치> ex : master로 전환 ) :

git checkout master

두 번째 ( 마스터있는지 확인하십시오 )

git branch -D $(git branch)


답변

git branch -d (또는 -D )은 여러 브랜치 이름을 허용하지만, 최소한 약간의 코드를 작성하지 않고 “지금 내가있는 브랜치를 제외한 모든 로컬 브랜치”를 자동으로 제공하는 것은 약간 까다 롭습니다.

“가장 좋은”(공식적으로 올바른) 방법은 git for-each-ref분기 이름을 가져 오는 데 사용 하는 것입니다.

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

하지만 어느 브랜치에 있는지 알아 내기가 훨씬 더 어렵습니다 ( git symbolic-ref HEAD멋진 스크립트를 작성하려는 경우 “공식적으로 올바른”방법입니다).

더 편리하게 사용할 수 있습니다. git branch, 두 개의 공백 또는 (현재 분기의 경우) 별표가 앞에있는 로컬 분기 이름을 인쇄합니다 *. 따라서 *버전 을 제거하기 위해 이것을 실행하면 공백으로 구분 된 브랜치 이름이 남습니다. 그러면 다음으로 전달할 수 있습니다 git branch -d.

git branch -d $(git branch | grep -v '^*')

또는:

git branch | grep -v '^*' | xargs git branch -d

소문자 -d는 “완전히 병합되지 않은”분기를 삭제하지 않습니다 (문서 참조). 을 사용 -D하면 커밋이 “손실”되더라도 그러한 분기가 삭제됩니다. 이 방법을 사용하면 분기 리플 로그도 삭제되므로 일반적인 “실수로 인한 삭제에서 복구”항목도 작동하지 않습니다.


답변

병합 된 모든 분기를 제거하려면 (current 제외 -v ‘*’) :

git branch --merged | grep -v '*' | xargs git branch -D

또한 repo 완전한 정리에 대한 명령을 만들었습니다.

alias git-clean="git branch  | grep -v '*' | grep -v 'master' | xargs git branch -D  && git reset --hard && git clean -d -x -f"

여기 에서 가져 왔습니다 .


답변

특정 분기를 제외한 모든 분기 삭제 :

git branch | grep -v "branch name" | xargs git branch -D

개발마스터를 제외한 모든 로컬 분기 삭제

git branch | grep -v "develop" | grep -v "master" | xargs git branch -D


답변

Windows의 경우 Powershell에서 다음을 사용합니다.

git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }