git delete remotes : 원격 참조가 존재하지 않습니다.


107

간단히 말해서

  • 병합 된 원격 원격 여러 대를 삭제하려면 어떻게해야합니까?

더 많은 배경;

마스터에 병합 된 수십 개의 리모컨이있는 git repo가 ​​있습니다. 다음을 사용하여 이러한 리모컨을 한 번에 하나씩 삭제할 수 있습니다.

git push --delete origin myBranch-1234

그러나 이것은 모든 리모컨에 대해 느리고 지루한 프로세스입니다. 그래서이 명령을 시도하고 있습니다.

git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete

git branch -r --merged병합 된 모든 리모컨을 나열합니다.
grep origin원점을 포함하도록 명령에 지시합니다.
grep -v master마스터를 제외하도록 명령을 지시합니다.
xargs git push origin --delete원격 목록을 삭제하도록 명령에 지시합니다.

모두 합쳐서 병합 된 모든 리모컨을 수집하고 삭제할 것으로 예상합니다.

위의 명령을 실행하면 병합 된 모든 리모컨에 대해 다음을 수신합니다.

error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc

그러나 이러한 리모컨은 존재하며 각각을 확인할 수 있습니다. 많은 사이트와 사람들은 git fetch --prune누락 된 참조를 정리하기 위해 실행 하도록 권장합니다 . 이 리모컨이 모두 존재하기 때문에 아무 작업도 수행하지 않습니다.

그래서 저는 여러분에게 부탁합니다, 친애하는 스택 교환;

  • 리모컨은 하나만 삭제할 수 있지만 여러 개는 삭제할 수없는 이유는 무엇입니까?
  • 내 명령이 맞습니까?

작은 것이 빠진 것 같아요. 이것을 조사 할 때마다 올바르게 수행하는 것처럼 보이지만 위의 오류가 발생합니다.

답변:


226

먼저 원격 분기의 로컬 "캐시"를 정리해야 할 수도 있습니다. 다음을 실행 해보십시오.

git fetch -p origin

삭제하기 전에.


2
그것은 나를 위해 그것을 해결했습니다, 감사합니다! 그러나 내가없이 가져올 때 왜 업데이트되지 --prune않습니까? 꽤 오해의 소지가있어 제 생각에는
dave0688

6
검색을 통해 여기에 도착하는 사람들을위한 메모입니다. 이것은 여기에 착륙하는 대다수에게 분명히 유용하지만 원래 문제 측면에서 실제로는 정확하지 않습니다. OP의 문제는 설명 된대로 그의 명령 origin/이 브랜치 이름에 잘못 포함되었다는 것입니다. / 다른 답변에서 해결되었습니다.
CupawnTae 2018

104

해당 분기가 원격 (원점)에서 제거됩니까? 그렇다면 간단히 할 수 있습니다.

git fetch --prune origin

그렇지 않으면 로컬에서 삭제 한 후에도 반환 될 수 있습니다.

업데이트 : 명령을 다시 보면 잘못 빌드하는 것 같습니다. 당신은 아마 원합니다

git push origin --delete myBranch-1234

그러나 대신 당신은

git push origin --delete origin/myBranch-1234

원점에서 제거 된 가지가 없습니다. 나는 그들 중 하나를 확인할 수 있습니다.
Jqw

1
예, 두 번째 경우에는 다른 명령을 실행하기 때문입니다.
Mykola Gurov

1
나는 당신의 요점을 이해하지 못합니다. 두 가지 다른 명령을 사용하고 있다는 것을 알고 있습니다. 두 번째 경우는 모든 병합 된 리모컨을 받고있다 git branch -r --merged그리고 나는 그들을 삭제하는 것을 시도하고있다 xargs git push origin --delete. 이 명령은 remote ref does not exist.
Jqw

1
두 번째 파이프 명령에서 xargs실제로 실행되는 내용을 보려면 바로 옆에 echo를 넣으십시오 .
Mykola Gurov

2
@Jqw origin/브랜치 이름에 접두사를 포함 할 수 없습니다 . git은 git push origin. Mykola의 제안은 .가 xargs echo아니라 명령의 마지막 부분을 만드는 것 echo xargs [...]입니다.
Matthew Read

15

사용 sed'원산지 /'부분을 제거하고 lttile의 변경 xargs부분.

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// |  xargs -I{} git push origin --delete {}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.