Git에서 오래된 원격 분기 제거


80

Git에서 bash 자동 완성을 사용하면 더 이상 가지고 있지 않은 오래된 리모컨의 분기가 계속 표시됩니다. 내가 할 때 git branch -la그것은 오래된 리모컨과 가지를 보여 주지만 그렇지 git branch -l않습니다. A ls .git/refs/remotes/도 그들을 보여줍니다. 그러나 그들은 내 .git / config에 존재하지 않으며 내가 실행할 때도 표시되지 않습니다 git remote show.

그래서 내 자동 완성 목록이 지금 너무 길기 때문에 어떻게 제거합니까?

나는 이미 시도했다 :

git reflog expire --expire=now --all
git gc --prune=now
rm .git/refs/remotes/theoldremote
git remote prune theoldremote

나는 또한 내가 repo를 다시 복제 할 수 있다는 사실을 알고 있지만 그것은 단지 속임수입니다 ;-)


참고 : git remote rm지금 (git 2.0.1, 2014 년 6 월) 원격 추적 분기를 먼저 삭제합니다. 그것은 오래된 나뭇 가지를 치우는 것을 피하는 데 도움이 될 것입니다. 보기 내 대답은 아래
VonC


여기 내 다른 대답은 : stackoverflow.com/a/44129766/3835843
아리프

답변:


142

Git은 원격 저장소에서 분기가 삭제 된 경우 (로컬) 원격 추적 분기를 자동으로 삭제하지 않습니다. 또한 V2.0.1 이전에는 원격 추적 분기가 git 구성에서 원격을 제거했을 때 일부 경우 삭제되지 않았습니다 (VonC의 답변 참조).

원격 저장소 중 하나에 대해 오래된 원격 추적 분기 (원격 저장소에서 삭제 된 분기)를 삭제하려면 다음을 실행하십시오.

git remote prune <remote>

man 페이지를 인용하거나 git remote:

치다

<name> 아래의 모든 부실 추적 분기를 삭제합니다. 이러한 부실 분기는 <name>에서 참조하는 원격 저장소에서 이미 제거되었지만 "remotes / <name>"에서 로컬로 계속 사용할 수 있습니다.

--dry-run 옵션을 사용하여 잘라낼 분기를보고하지만 실제로 잘라내지는 않습니다.

그러나 귀하의 질문에서 수동으로 제거 한 것처럼 .git/refs/remotes/theoldremote보이므로 Git은 더 이상 원격 추적 분기가 속한 원격 저장소에 대해 알지 못합니다. 그렇게해서는 안됩니다.

원격 저장소를 제거하는 일반적인 방법은 다음을 실행하는 것입니다.

git remote rm <remote>

이렇게하면에서 리모컨이 제거되고 원격 .git/config추적 분기가 삭제됩니다.

에서 디렉토리를 삭제 .git/refs/remotes/하면 브랜치는 뒤에 남아 있습니다. 그런 다음 수동으로 제거해야합니다.

git branch -rd <remote>/<branchname>

-r원격 지점을 삭제하는 옵션이 필요합니다 .


2
아뇨, 그게 아닙니다. 그것은 말한다 fatal: 'kolichikov' does not appear to be a git repository.
Alex

2
가져 오기 / 풀에서 원격 분기의 자동 정리에 대해서는 다음을 참조하십시오. stackoverflow.com/a/18718936/968201
Patrick James McDougle 2014 년

이 속도가 느리다면 문제가 해결 된 최신 Git (2.0.1+ IIRC)으로 업그레이드하십시오 (100 배 이상 빠름).
odinho-Velmont 2014

사용자 정리를위한 참고 사항 : Git 문서에 " 대부분의 경우 사용자는 git gcgit prune을 호출하는을 실행해야합니다 . "라고 말합니다. 그러나 그주의 git gc와 호환되지 않습니다 --dry-run.
JYL

git branch -rd <remote>/<branchname>내가 찾던 것이었다. 감사합니다!
Antoine Colson

16

나는 사용한다

git push origin :remote_branch

서버에서 분기를 제거합니다.

git remote prune origin

더 이상 서버에 존재하지 않는 원격 참조를 제거하려면


아뇨, 그게 아닙니다. 그것은 말한다fatal: 'kolichikov' does not appear to be a git repository
Alex

1
알렉스, 당신은 ...하지 홈 폴더의 저장소 폴더 내부의 명령을 실행해야
스파크

6

참고 : git remote prune이 답이지만 git 2.0.1 (2014 년 6 월 25 일)부터는 git remote rm 원격 추적 브랜치를 제거 하는 것으로 시작됩니다 .
그러니 바라건대, git remote rm.

참조 b07bdd3 커밋 에 의해 (옌스 린드 스트 룀 jensl)

remote rm: 마지막으로 원격 구성 삭제

원격을 제거 할 때 원격 구성을 삭제하기 전에 원격 추적 분기를 삭제하십시오.
이렇게하면 원격 추적 분기를 삭제하는 동안 작업이 실패하거나 중단 된 경우 명령을 다시 실행하여 작업을 완료 할 수 있습니다 .


그러나 필요한 경우 먼저 설정 한 경우 간단한 git fetch것으로 충분할 수 있습니다.

git config --global fetch.prune true
cd /path/to/repo
git config remote.origin.prune true


4

삭제하려면 브랜치에 아무것도 푸시 하지 마십시오 .

git push remote :remote_branch

문서 어딘가에 있지만 실제로는 명확하지 않습니다.

아니면 내가 당신의 질문을 오해 했습니까?


2
"문서 어딘가에 있지만 실제로는 명확하지 않습니다." 그런 것입니다git
mnagel 2013-07-04

"원격"이란 원격 저장소 이름을 의미했습니다. "원산지"또는 무엇이든. 그러나 나는 당신이 단순히 원격 지점을 삭제하는 것보다 다른 것을 의미한다고 생각하기 시작했습니다.
aragaer 2013

이와 같은 다른 것 : stackoverflow.com/questions/1072171/…
aragaer

4

알겠습니다. 문제는 원격이 더 이상 존재하지 않지만 git 데이터베이스 어딘가에 있다는 것입니다. 리모컨을 다시 추가 한 다음

git remote prune theremote
git remote rm theremote
git gc --prune=now

그 후 그들은 목록에서 사라집니다. 어떻게 든 추측하기 전에 올바르게 제거하지 않았습니다.


나는 여러 소스에서 모든 것을 시도했지만 효과가 있었던 유일한 방법은 문제를 원격으로 다시 추가 한 다음 제거하는 것뿐이었습니다. 감사!
jc00ke

0

실행했을 때 서버 측에서 삭제 된 원격 분기가 계속 나타날 때 혼란 스러웠습니다.

$ git branch --all

다음 명령은 나를 위해 이것을 수정했습니다 (git 버전 2.25.0에서).

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