현재 지점을 제외한 모든 지역 지점을 삭제할 수 있습니까?
...의 출력에 나열된 모든 분기를 삭제합니다.
$ git branch
... 하지만 현재의 가지를 한 걸음에 유지하는 것입니다.그게 가능한가요?만약 그렇다면, 어떻게?
$ git branch | grep -v "master" | xargs git branch -D
마스터를 제외한 모든 분기를 삭제합니다(마스터를 유지할 분기로 대체하지만 마스터를 삭제합니다).
먼저(유지할 분기로 전환 > ex: master):
git checkout master
두 번째(마스터에 있는지 확인):
git branch -D $(git branch)
PowerShell을 사용하는 경우 다음을 사용합니다.
git branch -D $(git branch).Trim()
@pankijs의 답변을 바탕으로 두 개의 깃 별칭을 만들었습니다.
[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
@torrek이 지적한 바와 같이:
는 합니다.
-d
"완전 병합되지 않은" 분기는 삭제되지 않습니다(설명서 참조).으로.-D
는 커밋이 "잃어버린" 상태가 되더라도 이러한 분기를 삭제합니다. 이는 분기 리로그도 삭제하므로 일반적인 "우발적 삭제에서 recover" 항목도 작동하지 않도록 주의하여 사용하십시오.
기본적으로, 절대로 사용하지 마십시오.-force
300% 확신이 없다면 중요한 것을 잃지 않을 것입니다.영원히 사라졌으니까요
특정 분기를 제외한 모든 분기 삭제:
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 $_ }
위와 같은 오류가 발생하면 지금 이 방법을 사용할 수 있습니다.
git branch -D @(git branch | select-string -NotMatch "master" | Foreach {$_.Line.Trim()})
현재 분기를 제외한 모든 분기를 한 단계에서 삭제하려면:
git branch | grep -v $(git rev-parse --abbrev-ref HEAD) | 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
화려한 대본을 쓰고 싶다면 이를 위한 "formally 정답" 방법입니다.
를 할 수 .git branch
칸하거나 ( 하거나() 를 인쇄합니다.*
이걸 통해 , 를 *
version을 선택하면 으로 구분된 version다(버전다)로할 수 있습니다. 그러면 해당 분기 이름을 전달할 수 있습니다.git branch -d
:
git branch -d $(git branch | grep -v '^*')
또는:
git branch | grep -v '^*' | xargs git branch -d
는 합니다.-d
"완전 병합되지 않은" 분기는 삭제되지 않습니다(설명서 참조).으로.-D
는 커밋이 "잃어버린" 상태가 되더라도 이러한 분기를 삭제합니다. 이는 분기 리로그도 삭제하므로 일반적인 "우발적 삭제에서 recover" 항목도 작동하지 않도록 주의하여 사용하십시오.
하려면( ) )-v ‘*’
):
git branch --merged | grep -v '*' | xargs git branch -D
repo complete cleaning을 위해 이런 명령을 내렸어요.
alias git-clean="git branch | grep -v '*' | grep -v 'master' | xargs git branch -D && git reset --hard && git clean -d -x -f"
여기서 가져왔습니다.
병합된 모든 분기를 로컬로 삭제:
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
삭제하고 싶지 않은 내용을 좀 더 선별적으로 선택할 수 있기 때문에 사용합니다.이 명령어는 마스터, 개발 및 현재 분기를 제외한 모든 분기를 제거합니다.
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
그래서 이걸 제 안에 넣었습니다.~/.zshrc
delete_branches() {
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
}
alias cleanup_branches=delete_branches
마스터 브랜치와 현재 피쳐 브랜치를 제외한 모든 것을 삭제하려고 한다면('team/features/dev-branch-name'이라고 하자), 다음과 같이 압축하고 싶습니다.
- 삭제할 분기를 먼저 봅니다.
- 그런 다음 삭제합니다.
분기를 보려면 다음과 같이 하십시오.
git branch | grep -v -Fx "$(git branch --show-current)\|master"
.grep -v "develop" | grep -v "master"
, 하지만 이것은 AND 조건입니다. 즉 "개발"이 없는 모든 지점 이름과 "마스터"가 없는 지점 이름을 지정하십시오.개인적으로 수술 조건을 찾고 있었습니다.
dev 분기를 실수로 삭제하는 것을 방지하기 위한 참고: 분기 이름의 하드 코딩이 없기 때문에 좋아 보이지만, 삭제 명령과 함께 이를 실행하는 동안 올바른 분기에서 체크아웃되지 않을 수 있음을 유의하십시오.체크아웃한 현재 지점이 마스터인 경우, 위는 마스터만 제외한 모든 지점이 나열되지만 마스터와 개발 지점을 제외한 모든 지점이 나열됩니다.
따라서, 저는 여러분이 보관하고 싶은 지점의 이름을 실제로 이렇게 적음으로써 이 바보 같은 행동을 방지하는 것이 최선이라고 생각합니다.
git branch | grep -v -Fx 'team/features/dev-branch-name\|master'
이를 통해 특정 분기를 체크아웃하지 않아도 해당 분기가 올바르게 나열될 수 있습니다.
삭제하려는 분기가 성공적으로 표시되면 다음 항목을 발행하여 삭제합니다.
git branch | grep -v -Fx 'team/features/dev-branch-name\|master' | xargs git branch -D
위 내용은 로컬 브랜치 삭제에만 적용됩니다.원격 분기도 삭제하려면(예: 복제된 over repo 편집/트림과 같은 경우) 다음을 사용합니다.
git branch -r | grep -v -Fx 'team/features/dev-branch-name\|master' | cut -d'/' -f 2- | xargs -L 1 git push origin --delete
서 몇 있습니다. 입니다.-r
모든 원격 분기를 나열하는 것입니다(필요한 로컬 분기를 이미 모두 삭제한 경우 원격 분기만 남아 있고 해당 분기에 대해 쿼리해야 함).-Fx
s를 .-v
는 NOT 조건입니다.맨 페이지 컷에 따르면, 할.cut -d'/' -f 2-
결과를 '/'로 나눈 다음 줄의 끝(-f 2-)까지 필드 2를 수행합니다.이것은 당신이 파이프링을 원할때 유용합니다.team/features/dev-branch-name
origin/team/features/dev-branch-name
.xargs
cut -d'/' -f 2-
, 그러면 당신은 이렇게 말할 것입니다.git push origin --delete origin/branch
git push origin --delete branch
. 전자는 작동이 안 돼요.-L 1
말하다xargs
합니다.git push
한 줄씩 명령하다
('
( ) 마크, 그것은 그것들에 성공하지 못할 것입니다.이를 위해 다음을 시도해 볼 수 있습니다.
git branch -r | grep -v "'" | cut -d'/' -f 2- | xargs -L 1 git push origin --delete
로 인해 이 이 난 .fatal: invalid spec
오류를 범실.
git branch
는다 에 붙은 .*
하면 'Powershell 됩니다'로됩니다.*
.
git branch | ? { $_ -lt "*" } | % { git branch -D $_.Trim() }
?
= Where-Object
%
개==
윈도우 환경을 위해 이 컨스트럭트를 만든 적이 있습니다.다른 사람에게 도움이 될지도 몰라요.실행 중 마스터 및 현재 분기는 삭제되지 않습니다.그 외 병합된 분기는 관계없이 모두 삭제됩니다.
@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
는 로됩니다 됩니다.*
들면
git branch
branchA
branchB
* mybranch
otherthing
그냥 해요
for b in $(git branch | grep -v \*); do git branch -D $b ; done
로 되지 않은 는 모두 합니다.*
그래서 여기에 암호화된 많은 분파 이름들이 보이는데요.그리고 저는 여기서 제 대답이 질문의 "현재의 분파" 부분에 더 정확하고, 저와 같은 초보자들을 비난하기 위해 한 줄로 유지하고 읽을 수 있다고 생각합니다.단지 그것이 정당한 곳에 신용을 두기 위해서, 답은 또한 분명히 @pankijs의 답에 기초하고 있습니다.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
데비안에 있는 .bash_aliases에 있는 한 줄에도 그것이 있습니다.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(일부 명령줄에서 하위 명령을 실행하려면 일부 bash 기능을 활성화해야 한다고 생각합니다.)
이 중 가장 쉬운 것은 다음과 같습니다.
- 프로젝트 폴더에서 - "git branch" 명령을 사용하여 모든 분기 목록을 가져옵니다.
- 얻은 분기 목록 복사
- 목록과 보관할 마스터 목록에서 "마스터"를 삭제합니다.
- "&&"로 구분된 모든 분기를 함께 삭제하는 명령어 쓰기(아래 예 참조)
- 완전히 병합되지 않은 분기도 삭제하려면 아래 명령에서 "-d" 대신 "-D"를 사용합니다. "-D"는 분기를 강제로 삭제합니다.
예:
git branch -d branch1 && git branch -d branch2 && git branch -d branch3 && git branch -d branch4 && git branch -d branch5 && ...
이것은 저에게 효과가 있고 저는 많은 브랜치를 함께 제거하는 것이 매우 쉽다는 것을 알게 되었습니다. 또한 브랜치마다 삭제되는 메시지와 삭제되지 않는 브랜치에 대한 오류 메시지도 받습니다.
보관해야 할 지점 체크아웃만 하면 됩니다. 체크아웃 마스터는 현재 git worktree에서 다음을 사용합니다.
git branch | xargs git branch -D
체크아웃된 분기 및 "*" 분기(브랜치를 체크아웃하기 전에 분기 목록에 있는 기호)를 제거할 수 없다는 오류가 몇 가지 나타날 것입니다.로컬 깃 저장소에 대한 여러 워크트리가 있는 경우 체크아웃된 다른 분기도 현재 저장소의 다른 워크트리에서 체크아웃되는 분기 전에 분기 목록에 표시된 기호에 따라 동일한 오류(및 "+" 분기를 제거하는 동안 추가 오류)로 유지됩니다.
리눅스에서 찾고 있는 명령어는 다음과 같습니다.
git branch --list | grep -v "^* $(git branch --show-current)$" | xargs git branch -D
여기서,git branch --show-current
분기 이름을 하드 코딩하는 대신 현재 분기를 가져오는 데 사용됩니다.
IMHO, 로컬 브랜치를 제거하는 가장 안전한 방법은 다음과 같습니다.
git branch -av | grep "\[gone\]" | awk '{print $1}' | xargs git branch -d
또한 이 항목과 관련된 자세한 정보를 확인할 수 있습니다. 모든 로컬 깃 분기 삭제
언급URL : https://stackoverflow.com/questions/28572293/can-i-delete-all-the-local-branches-except-the-current-one
'programing' 카테고리의 다른 글
angularjs - ngRepeat with ngInit - ngRepeat는 렌더링된 값을 새로 고치지 않습니다. (0) | 2023.10.12 |
---|---|
해당 루프의 함수 내에서 루프를 탈출하는 것 (0) | 2023.10.12 |
복잡한 함수 선언을 어떻게 이해해야 합니까? (0) | 2023.10.12 |
Visual Studio 2012의 디버그 .NET Framework 소스 코드? (0) | 2023.10.12 |
논증 평가란 무엇입니까? (0) | 2023.10.12 |