Git은 원격 지사를 삭제할 때 원격 참조가 존재하지 않는다고 말합니다.


130

나는 달렸다 git branch -a

* master
  remotes/origin/test
  remotes/origin/master

원격 지점을 삭제하고 싶습니다

난 노력 했어

git push origin --delete remotes/origin/test

알았어

오류 : '원격 / 원산지 / 테스트'를 삭제할 수 없습니다 : 원격 참조가 없습니다

어떻게 존재하지 않습니까?

나는 git branch -a했고 나는 그것을 보았다.

내가 뭘 그리워 했어?


1
git branch -a리모컨이 아닌 로컬의 지점을 나열합니다. 권리?

나는 그들 모두를 생각합니다. 확실하지 않습니다.
cyber8200

2
그것은 당신의 지역 내 원격 지점을 보여줍니다. 모든 원격 브랜치를 나열하지는 않습니다.

1
@ peterh 실제로 "원격 지사를 삭제할 수없는 이유"(아마도 지점이 원격에서 삭제되었지만 원격 참조가 여전히 로컬에있는 경우)를 묻는 것처럼 보입니다. 따라서 중복되지는 않지만 명확한 제목
앤드류 스펜서

1
제목을 수정했습니다. 이것이 질문의 의도에 더 가깝기를 바랍니다
Andrew Spencer

답변:


259

명령 git branch -a로컬 저장소에있는 원격 브랜치를 표시 합니다 . 약간 혼란 스러울 수 있지만 이해하려면 원격 브랜치와 원격 리포지토리에있는 브랜치간에 차이가 있음을 이해해야합니다. 원격 브랜치는 원격 리포지토리의 브랜치에 매핑 되는 로컬 브랜치입니다. 따라서 원격 브랜치 세트는 원격 저장소의 상태를 나타냅니다.

원격 브랜치 목록을 업데이트하는 일반적인 방법은를 사용하는 것 git fetch입니다. 이것은 원격에서 업데이트 된 브랜치 목록을 자동으로 가져오고 로컬 저장소에 원격 브랜치를 설정하고 누락 된 커밋 객체를 가져옵니다.

그러나 기본적으로 git fetch원격에 더 이상 대응하는 분기가없는 원격 분기는 제거하지 않습니다. 그렇게하기 위해서는, 당신은 명시 적으로 할 필요가 치기 원격 지점의 목록을 :

git fetch --prune

원격에 더 이상 존재하지 않는 원격 브랜치를 자동으로 제거합니다. 그 후, git branch -r실제로 원격에 존재하는 업데이트 된 분기 목록이 표시됩니다. 그리고를 사용하여 삭제할 수 있습니다 git push.

즉,를 사용 git push --delete하려면 원격 저장소에서 분기 이름을 지정해야합니다. 원격 지사의 이름이 아닙니다. 따라서 지점 test(원격 지점으로 표시 origin/test) 을 삭제하려면 을 사용 git push origin --delete test합니다.


git branch -r | grep "origin"포크를 사용하는 큰 프로젝트 에도 도움이 될 것입니다
Seraf

따라서 git 에서이 메시지를 얻는 데는 두 가지 이유가 있습니다. 분기가 이미 서버에서 삭제되었거나 분기 이름 앞에 접두사를 잘못 붙 remotes/origin/였습니다. 아니면 둘다.
앤드류 스펜서

136

의미 remotes/origin/test는 당신이 test원격 서버에서 라는 지점을 가지고 있다는 것 origin입니다. 따라서 명령은

git push origin --delete test

25

원점에서 분기를 삭제하는 바로 가기가 있습니다.

git push origin :<branch_name>

어느 것과 똑같습니다 git push origin --delete <branch_name>


13
  1. 원격 지점 목록을 얻습니다
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. 원격 브랜치 목록을 가져와야합니다.
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. 이제 분기를 삭제할 수 있습니다.
git push origin --delete deleteme


4

원격 브랜치가 remotes / origin / test 인 경우 두 가지 방법을 사용할 수 있습니다.

git push origin --delete test

git branch -D -r origin/test

3

나는 결국 약간의 조정 으로 찌름 으로 해결책을 따랐다 . 내 단계는
- git fetch --prune;
- git branch -a다음을 인쇄
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(제거 할 원격 분기)
- git push origin --delete branch.
여기서 제거 할 브랜치는 이름이 remotes/origin/branch아니라 단순히 branch입니다. 그리고 가지가 제거됩니다.


댓글 re +1 : 지점 이름, origin/branch그냥 있어야 할 때 삭제하려고했습니다 branch.

1

git branch -a 리모컨의 분기가 아닌 로컬 분기를 나열합니다.

그리고 오류 error: unable to delete 'remotes/origin/test': remote ref does not exist는 리모컨에 해당 이름의 지점이 없지만 지점이 로컬에 있음을 의미합니다.


도움이됩니다. 내 삭제 문제를 해결했습니다. "git push --delete origin / test"가 작동하지 않는 이유가 궁금합니다. "git push --delete test"가 작동하는 동안
user10293779

1

원점에서 '마스터'이외의 분기를 삭제하는 편리한 한 줄짜리 :

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

이를 수행하기 전에이 실행의 의미를 이해해야합니다!


이 코드에 감사드립니다! 이것은 마스터를 제외한 모든 원격 분기를 삭제하는 작업을 테스트 한 유일한 자식 코드입니다.
Alvin

1

나를 위해 이것은 $ ▶ git branch -D -r origin / mybranch 일했습니다.

세부

$ ▶ 자식 분기 -a | grep mybranch 리모컨 / 원산지 / mybranch

$ ▶ 자식 분기 -r | grep mybranch 원산지 / mybranch

$ ▶ 자식 분기 개발 * 기능 / 전 배포

$ ▶ 자식 푸시 원점-삭제 mybranch 오류 : 'mybranch'를 삭제할 수 없습니다 : 원격 참조가 존재하지 않습니다 오류 : 일부 참조를 'git@10.102.100.38 : config / myrepo.git'으로 푸시하지 못했습니다.

$ ▶ git branch -D -r origin / mybranch 삭제 된 원격 분기 origin / mybranch (기존 62c7421).

$ ▶ 자식 분기 -a | Grep Mybranch

$ ▶ 자식 분기 -r | Grep Mybranch


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