programing

원격 저장소에서 로컬 Git 분기를 삭제한 후 삭제

linuxpc 2023. 7. 15. 09:47
반응형

원격 저장소에서 로컬 Git 분기를 삭제한 후 삭제

로컬 리포지토리와 원격 리포지토리를 항상 분기 측면에서 동기화하고 싶습니다.

GitHub에 대한 Pull Request 검토 후, 나는 내 브랜치를 그곳에 병합하고 제거합니다(원격).어떻게 하면 이 정보를 로컬 저장소로 가져와서 Git가 내 로컬 버전의 브랜치도 제거하도록 할 수 있습니까?

빠른 길

git branch --merged | grep -v "\*" | xargs -n 1 git branch -d

당신이 NB에 : 연되어있않은경우지결경우▁nb.master분기를 삭제할 수 있습니다."더 나은 방법"을 위해 계속 읽으세요.

우리가 주인이 될 수 있도록 하라.

다음을 보장할 수 있습니다.master또는그문대다한가른제지않다습니지거되는제에▁for▁by에 의해 grep더 많은 것을 찾습니다.이 경우 다음과 같이 처리할 수 있습니다.

git branch --merged | grep -v "\*" | grep -v "YOUR_BRANCH_TO_KEEP" | xargs -n 1 git branch -d

그래서 만약 우리가 계속하기를 원한다면,master,develop그리고.staging예를 들어, 우리는 갈 것입니다.

git branch --merged | grep -v "\*" | grep -Ev "(\*|master|develop|staging)" | xargs -n 1 git branch -d

별칭으로 만들기

길이가 약간 길기 때문에 에일리어스를 추가하는 것이 좋습니다..zshrc또는.bashrc은 내이은름입니다.gbpurge(의 경우)git branches purge):

alias gbpurge='git branch --merged | grep -Ev "(\*|master|develop|staging)" | xargs -n 1 git branch -d'

그러면 다시 로드합니다..bashrc또는.zshrc:

. ~/.bashrc

또는

. ~/.zshrc

GitHub과 동일한 흐름을 사용하며 이전 답변이 만족스럽지 못했습니다.git branch --merged에는 병합된 분기가 나열되어 있지만 이 경우 모두 원격으로 제거된 것은 아닙니다.그래서, 이것은 저에게 효과가 있었습니다.

git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d

위치:

  • git fetch --all -p branch (로컬 지점 상태 업데이트)
  • git branch -vv branch 는 다음과 같습니다.
  • grep ": gone]"을 필터링합니다.
  • awk '{ print $1 }'의 이름을 .
  • xargs -n 1 git branch -d delete에 합니다.

참고: 원하는 경우 -d 대신 -D를 사용하여 삭제할 수 있습니다.

예:

someUsr@someHost:~/repo$ git branch -a
basic-testing
integration-for-tests
* master
origin
playground-for-tests
test-services
remotes/origin/HEAD -> origin/master
remotes/origin/basic-testing
remotes/origin/master
remotes/origin/test-services

someUsr@someHost:~/repo$ git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d
Fetching origin
Deleted branch integration-for-tests (was fbc609a).
Deleted branch playground-for-tests (was 584b900).

someUsr@someHost:~/repo$ git branch -a
basic-testing
* master
origin
test-services
remotes/origin/HEAD -> origin/master
remotes/origin/basic-testing
remotes/origin/master
remotes/origin/test-services

참조:

http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches

시도:

git pull -- 가지치기

해당 원격 분기가 삭제되면 로컬 분기가 삭제됩니다.

업데이트됨:

위의 진술은 그렇게 정확하지 않습니다.

사실달는기를 실행하는 것.git pull --prune다음과 같은 원격 추적 분기만 제거합니다.

리모콘/리모트/fff원격/원격/개발리모트/리모트/마스터

그러면, 당신은 달릴 수 있습니다.git branch -r컴퓨터에 남아 있는 원격 검색 분기를 확인합니다.왼쪽 분기가 다음과 같다고 가정합니다.

기원/개발기원/마스터

그 말은 가지를 의미합니다.origin/fff삭제됩니다.

그서래를 실행한 에 달고난후에리를 실행합니다.git pull --prune그냥 실행:

git branch --merged | grep -vFf <(git branch -r | cut -d'/' -f2-)

다음과 같은 모든 로컬 분기를 확인할 수 있습니다.

  1. 더 이상 해당 원격 지점이 없습니다.
  2. 안전하게 제거할 수 있습니다.

그리고나서,<the command above> | xargs git branch -d모두 삭제할 수 있습니다.

이렇게 하면 승인된 솔루션을 사용하여 마스터개발 분기가 삭제되지 않도록 할 수 있습니다.

git branch --merged | egrep -v "^\*|master|development" | xargs -n 1 git branch -d

파워셸을 사용하는 사용자의 경우 위의 답변과 동일합니다.

git branch -vv | Select-String -Pattern ': gone]' | ForEach-Object{($_ -split "\s+")[1]} | %{ git branch -D $_ }
  1. 없어진 으로 표시된 모든 분기 필터링
  2. 불러git branch -D발견된 각 분기에서(사용)-D병합 상태에 관계없이 분기를 삭제합니다.

매우 간단한 솔루션: 로컬 레포를 제거하고 원격 레포를 새로 복제합니다.매우 우아해 보이지 않을 수도 있지만, 그것은 간단하며 당신은 남성 페이지를 읽지 않고 당신이 무엇을 하고 있는지 정확히 이해할 수 있을 것입니다 :-).

이 모든 것이 나에게 효과가 없었습니다.다른 답변은 여기에서 확인하실 수 있습니다. https://stackoverflow.com/a/34969726/550454

하지만 본질적으로, 나는 지금 이것을 내 안에 가지고 있습니다.~/.gitconfig:

[alias]
  prune-branches = !git remote prune origin && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -d

분기를 마스터로 밀어넣고 병합한 경우 다음 gitbash를 수행합니다.

git branch -d branch_name_to_delete

현재 해당 분기에 있는 경우 마스터로 다시 이동합니다.이 시점에서 다음을 사용하여 당깁니다.

git pull

병합된 로컬 분기를 제거하기 위해 이 작업을 수행합니다.

git branch -d $(git branch --merged)

기존 추적도 제거하려는 경우:

git pull --prune

해당 원격 지점이 없는 모든 로컬 지점을 나열하기 위해 이 한 줄로 작성했습니다.

diff -u <(git branch|sed 's/..//') <(git branch -r|sed 's/..origin\///')|tail -n +4|sed -n "s/^-//p" -

이 작업을 수행한 후에는 로컬 분기를 쉽게 삭제할 수 있습니다.xargs:

diff -u <(git branch|sed 's/..//') <(git branch -r|sed 's/..origin\///')|tail -n +4|sed -n "s/^-//p" -|xargs -r git branch -d

투표된 답변은 마스터를 삭제할 가능성이 있습니다.아래의 실제 사례를 고려해 보십시오.

나는 hemen_README와 hemen_BASEBOX 두 개의 기능 분기가 develop으로 병합된 다음 develop이 master로 병합되었습니다.기능 분기 hemen_README 및 hemen_BASEBOX가 원격으로 삭제되었지만 여전히 로컬로 표시됩니다.또한 저는 로컬 마스터가 아니라 개발 중입니다.

그런 경우에는

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a
    * develop                      671ad6c Merged in hemen_README (pull request #1)
        hemen_BASEBOX                a535c0f added global exec paths to puppet manifest
        hemen_README                 ba87489 Updated Readme with considerable details
        master                       8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore
        remotes/origin/develop       671ad6c Merged in hemen_README (pull request #1)
        remotes/origin/hemen_BASEBOX a535c0f added global exec paths to puppet manifest
        remotes/origin/hemen_README  ba87489 Updated Readme with considerable details
        remotes/origin/master        2f093ce Merged in develop (pull request #3)

그래서 위의 부분 명령을 실행하면,

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch --merged | grep -v "\*"
        hemen_BASEBOX
        hemen_README
        master

마스터도 표시되며 결국 삭제됩니다.

어쨌든 저는 그것을 할 수 있었습니다.저는 제가 어떻게 그것을 달성했는지에 대해 당신과 세션을 공유합니다.

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git remote prune origin --dry-run
    Pruning origin
    URL: git@bitbucket.org:hemenkapadiapublic/vagrant-webdev.git
     * [would prune] origin/hemen_BASEBOX
     * [would prune] origin/hemen_README
    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git remote prune origin 
    Pruning origin
    URL: git@bitbucket.org:hemenkapadiapublic/vagrant-webdev.git
     * [pruned] origin/hemen_BASEBOX
     * [pruned] origin/hemen_README

저는 방금 전에 어떤 방식으로 가지치기를 할지 확인하고 가지치기를 했습니다.아래의 지점 명령을 보면 우리는 원격지를 처리했습니다.

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a
    * develop                671ad6c Merged in hemen_README (pull request #1)
        hemen_BASEBOX          a535c0f added global exec paths to puppet manifest
        hemen_README           ba87489 Updated Readme with considerable details
        master                 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore
        remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1)
        remotes/origin/master  2f093ce Merged in develop (pull request #3)

이제 로컬 분기를 삭제합니다.

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -d hemen_BASEBOX 
    Deleted branch hemen_BASEBOX (was a535c0f).
    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -d hemen_README
    Deleted branch hemen_README (was ba87489).

좋습니다. 이제 가지가 원하는 대로 되었습니다.

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a
    * develop                671ad6c Merged in hemen_README (pull request #1)
        master                 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore
        remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1)
        remotes/origin/master  2f093ce Merged in develop (pull request #3)

언급URL : https://stackoverflow.com/questions/17983068/delete-local-git-branches-after-deleting-them-on-the-remote-repo

반응형