원격 저장소에서 로컬 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-)
다음과 같은 모든 로컬 분기를 확인할 수 있습니다.
- 더 이상 해당 원격 지점이 없습니다.
- 안전하게 제거할 수 있습니다.
그리고나서,<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 $_ }
- 없어진 것으로 표시된 모든 분기 필터링
- 불러
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
'programing' 카테고리의 다른 글
.git 폴더 축소 방법 (0) | 2023.07.15 |
---|---|
Vuex에서 사용자 지정 개체 메서드를 사용하는 방법은 무엇입니까? (0) | 2023.07.15 |
빠른 로그 기준 2개의 상한 계산 (0) | 2023.07.15 |
TypeScript에서 제네릭 배열을 어떻게 정의합니까? (0) | 2023.07.15 |
상대 레이아웃의 백분율 너비 (0) | 2023.07.15 |