Git 원격 브랜치가 삭제되었지만 여전히 'branch -a'에 나타납니다.


552

coolbranch내 저장소에 지점이 있다고 가정 해 봅시다 .

이제 다음을 사용하여 (원격 및 로컬 모두) 삭제하기로 결정했습니다.

git push origin :coolbranch
git branch -D coolbranch

큰! 이제 지점이 실제로 삭제되었습니다.

하지만 내가 달릴 때

git branch -a

나는 여전히 얻는다 :

remotes/origin/coolbranch

주목해야 할 것은 새로운 저장소를 복제 할 때 모든 것이 잘되고 git branch -a분기를 표시하지 않는다는 것입니다 .

알고 싶습니다- branch -a새 인스턴스를 복제하지 않고 목록 에서 분기를 삭제하는 방법이 있습니까?



58
당신 git fetch -p(또는 git pull -p)이라면, 원격 브랜치는 정리됩니다.
yoyo

답변:


688

git remote prune origin다른 답변에서 제안한 것처럼 그러한 오래된 지점을 모두 제거합니다. 아마도 대부분의 경우 원하는 것이지만 특정 원격 추적 분기를 제거하려면 다음을 수행하십시오.

git branch -d -r origin/coolbranch

( -r잊기 쉽다 ...)

-r이 경우 " -d원격 추적 분기를 나열하거나 삭제합니다 (와 함께 사용 된 경우 )." 여기에있는 Git 문서에 따르면 https://git-scm.com/docs/git-branch


11
git remote prune origin또는 git fetch --prune내 경우에는 어떤 형태의 신고도 효과가 없었습니다. ...하지만 git branch -d -r origin/feature/branch-name작동했습니다. feature네임 스페이스 (git flow) 아래에있는 것과 관련이 있는지 확실하지 않지만 Google 직원이 자신에게 발생하는 것을 발견하면 그 방식이 다운되었습니다.
Misterparker

8
이것이 필요한 이유가 있습니까? 존재하지 않는 분기 이름을 목록에 남겨두면 자동으로 정리되지 않는 것이 실제로 나쁜 것 같습니다.
akronymn

296

시험:

git remote prune origin

로부터 망할 놈의 원격 문서 :

치다

<name> 아래의 오래된 원격 추적 분기를 모두 삭제합니다. 이 오래된 분기는 <name>에서 참조하는 원격 저장소에서 이미 제거되었지만 "remotes / <name>"에서 여전히 로컬로 사용 가능합니다.

--dry-run 옵션을 사용하면 잘라낼 가지를보고하지만 실제로 제거하지는 않습니다.


1
완전성 : stackoverflow.com/a/17983126/94687git pull --prune언급 된 것과 유사해야합니다 .git remote update --prune
imz-Ivan Zakharyaschev

230

최고를 잊지 마세요

git fetch -p

모든 원점을 가져오고 정리합니다.


완성도 : stackoverflow.com/a/6127884/94687stackoverflow.com/a/17983126/94687git remote prune origingit pull --prune언급 된 것과 동일 하고 유사 해야합니다 . git remote update --prune
imz-Ivan Zakharyaschev

2
그러나 실행하면 분기가 여전히 표시됩니다.git branch -a
Nikhil Sahu

1
@NikhilSahu : 더 이상 제거 된 원격 브랜치를 보지 못합니다git branch -a
user276648

20

우리의 특별한 경우에, 우리는 원격 Git 저장소로 Stash를 사용합니다. 우리는 모든 이전 답변을 시도했지만 아무것도 효과가 없었습니다. 결국 다음을 수행해야했습니다.

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

그런 다음 사용자가 변경 사항을 가져 오면 다음을 수행해야했습니다.

git fetch -p

git branch -d branch-name나를 위해 일했다. 에 유의 -D하십시오 -d. 사실 대문자 D로 시도했을 때 -D이름이 -D
RP-

1
"-D"는 푸시 또는 병합 상태에 관계없이 삭제를 강제 실행하는 방법입니다. 분명히 그것을 사용하는 데 조심해야하지만 많은 경우에 필요했습니다.
Shadowvail

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.