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

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은 원격 저장소에서 분기가 삭제 된 경우 (로컬) 원격 추적 분기를 자동으로 삭제하지 않습니다. 또한 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원격 지점을 삭제하는 옵션이 필요합니다 .


답변

나는 사용한다

git push origin :remote_branch

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

git remote prune origin

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


답변

참고 : 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


답변

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

git push remote :remote_branch

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

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


답변

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

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

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


답변

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

$ git branch --all

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

$ git remote update --prune


답변