현재 지점을 제외한 모든 로컬 지점을 삭제할 수 있습니까?
출력에 나열된 모든 분기를 삭제하고 싶습니다.
$ 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
마스터를 제외한 모든 브랜치를 삭제합니다 (마스터를 유지하려는 브랜치로 교체하지만 마스터는 삭제됩니다)
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
병합 된 모든 분기를 로컬에서 삭제합니다.
git branch -D `git branch --merged | grep -v \* | xargs`
특정 분기를 제외한 모든 분기 삭제 :
git branch | grep -v "branch name" | xargs git branch -D
개발 및 마스터를 제외한 모든 로컬 분기 삭제
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
한 번 내 Windows 환경을 위해이 구성을 만들었습니다. 다른 사람에게 도움이 될 수도 있습니다. 실행 중에 마스터 및 현재 분기는 삭제되지 않습니다 . 다른 병합 된 분기는 모두 삭제됩니다.
@echo off
cd PATH_TO_YOUR_REPO
REM -- Variable declerations
set "textFile=tempBranchInfo.txt"
set "branchToKeep=master"
set "branchToReplaceWith="
git branch --merged > %textFile%
REM -- remove "master" from list to keep the branch
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%textFile%" echo(!line:%branchToKeep%=%branchToReplaceWith%!
endlocal
)
REM -- execute branch delete commands
for /f "delims=" %%a in (%textFile%) do (
git branch -D %%a
)
REM -- remove temp-file with branch information inside
DEL %textFile%
REM -- show local branches after the cleaning
echo Local branches:
git branch
pause
exit
Windows의 경우 Powershell에서 다음을 사용합니다.
git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }
git branch
현재 분기가 접두사로 표시된 것으로 가정 합니다 *
. Powershell을 사용하면 다음 하나의 라이너가 *
.
git branch | ? { $_ -lt "*" } | % { git branch -D $_.Trim() }
?
= Where-Object
%
= Foreach-Object
first (switch to the branch you want to keep > ex: master):
git checkout master
second (make sure you are on master)
git branch -D $(git branch)
IMHO, the safest way of removing local branches is:
git branch -av | grep "\[gone\]" | awk '{print $1}' | xargs git branch -d
Also, more info related to this topic you can find Delete all local git branches
'IT TIP' 카테고리의 다른 글
SQLite 스크립트 실행 (0) | 2020.10.17 |
---|---|
Xcode 프로젝트에서 실수로 xcassets 파일을 제거했습니다. (0) | 2020.10.17 |
Java에서 두 개의 위도 + 경도 지점을 기반으로 거리를 측정하고 경계 상자를 만드는 방법은 무엇입니까? (0) | 2020.10.17 |
명령 줄에서 Git 로그 아웃 사용자 (0) | 2020.10.17 |
OnClickListener 내부에서 많은 것에 액세스 할 수 없습니다. 어떻게 접근합니까? (0) | 2020.10.17 |