programing

현재 지점을 제외한 모든 지역 지점을 삭제할 수 있습니까?

css3 2023. 10. 12. 23:26

현재 지점을 제외한 모든 지역 지점을 삭제할 수 있습니까?

...의 출력에 나열된 모든 분기를 삭제합니다.

$ 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" 항목도 작동하지 않도록 주의하여 사용하십시오.

기본적으로, 절대로 사용하지 마십시오.-force300% 확신이 없다면 중요한 것을 잃지 않을 것입니다.영원히 사라졌으니까요

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

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'이라고 하자), 다음과 같이 압축하고 싶습니다.

  1. 삭제할 분기를 먼저 봅니다.
  2. 그런 다음 삭제합니다.

분기를 보려면 다음과 같이 하십시오.

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모든 원격 분기를 나열하는 것입니다(필요한 로컬 분기를 이미 모두 삭제한 경우 원격 분기만 남아 있고 해당 분기에 대해 쿼리해야 함).-Fxs를 .-v는 NOT 조건입니다. 페이지 컷에 따르면, 할.cut -d'/' -f 2-결과를 '/'로 나눈 다음 줄의 끝(-f 2-)까지 필드 2를 수행합니다.이것은 당신이 파이프링을 원할때 유용합니다.team/features/dev-branch-nameorigin/team/features/dev-branch-name.xargscut -d'/' -f 2-, 그러면 당신은 이렇게 말할 것입니다.git push origin --delete origin/branchgit 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 기능을 활성화해야 한다고 생각합니다.)

이 중 가장 쉬운 것은 다음과 같습니다.

  1. 프로젝트 폴더에서 - "git branch" 명령을 사용하여 모든 분기 목록을 가져옵니다.
  2. 얻은 분기 목록 복사
  3. 목록과 보관할 마스터 목록에서 "마스터"를 삭제합니다.
  4. "&&"로 구분된 모든 분기를 함께 삭제하는 명령어 쓰기(아래 예 참조)
  5. 완전히 병합되지 않은 분기도 삭제하려면 아래 명령에서 "-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