Git에서 유효하지 않은 원격 분기 참조를 어떻게 제거합니까?
-
21-08-2019 - |
문제
현재 저장소에는 다음과 같은 출력이 있습니다.
$ git branch -a
* master
remotes/origin/master
remotes/public/master
삭제하고 싶어요 remotes/public/master
지점 목록에서:
$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.
또한, git remote
이상해요, 목록에 없으니까 public
:
$ git remote show
origin
브랜치 목록에서 'remote/public/master'를 어떻게 삭제하나요?
업데이트하고 시도했습니다. git push
명령:
$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
해결책
정리가 필요할 수도 있습니다
git gc --prune=now
아니면 자두가 필요할 수도 있어요
git remote prune public
치다
<name> 아래의 오래된 추적 분기를 모두 삭제합니다.이러한 오래된 분기는 <name>이 참조하는 원격 저장소에서 이미 제거되었지만 "remotes/<name>"에서 여전히 로컬로 사용할 수 있습니다.
--dry-run 옵션을 사용하면 어떤 가지를 정리할지 보고하지만 실제로 정리하지는 않습니다.
그러나 이러한 항목은 이전에 다음과 같이 정리되어야 하는 것으로 보입니다.
git remote rm public
RM
<name>이라는 원격을 제거합니다.리모컨의 모든 원격 추적 브랜치 및 구성 설정이 제거됩니다.
따라서 구성 파일을 직접 편집했는데 이런 일이 발생하지 않았거나 권한 문제가 있을 수 있습니다.
다시 실행해서 무슨 일이 일어나는지 확인해 보세요.
조언 컨텍스트
에서 살펴보시면 개정 로그, 당신은 내가 더 "올바른" 기술을 제안했다는 것을 알게 될 것입니다. 어떤 이유로든 저장소에서 작업하고 싶지 않았습니다.
나는 OP가 트리를 일관되지 않은 상태로 남겨서 트리가 약간 이상하게 동작하게 만드는 일을 했다고 의심했습니다. git gc
왼쪽 크러프트를 수리해야 했습니다.
대개 git branch -rd origin/badbranch
로컬 추적 지점을 누킹하는 데 충분합니다. 또는 git push origin :badbranch
원격 지점을 누킹하기 위해 대개 당신은 것입니다 절대 전화해야 해 git gc
다른 팁
당신이해야 할 일은
git fetch -p
원격으로 삭제 된 모든 지역 지점을 제거합니다.
GIT 1.8.5+에 있다면 자동으로 설정할 수 있습니다.
git config fetch.prune true
또는
git config --global fetch.prune true
git push public :master
이렇게하면 이름이 지정된 원격 브랜치가 삭제됩니다 master
켄트 프레드릭이 지적한대로.
원격 추적 지점을 나열하려면 :
git branch -r
원격 트래킹 브랜치를 삭제하려면 :
git branch -rd public/master
당신이해야 할 일은
$ git branch -rd origin/whatever
그렇게 간단합니다. 여기서 GC를 호출 할 이유가 없습니다.
git gc --prune=now
당신이 원하는 것이 아닙니다.
git remote prune public
또는 git remote prune origin
# 원격 소스 인 경우
당신이 원하는 것입니다
Ref가 포장되었을 때 받아 들여진 답변은 저에게 효과가 없었습니다. 그러나 이것은 다음과 같습니다.
$ git remote add public http://anything.com/bogus.git
$ git remote rm public
제 경우에는 저장된 항목을 삭제하려고했습니다. .git/packed-refs
. 이 일반 텍스트 파일을 편집하고 항목을 삭제할 수 있습니다. git br -D
만지는 방법을 모릅니다 (적어도 VER 1.7.9.5에서).
여기서이 솔루션을 찾았습니다. https://stackoverflow.com/a/11050880/1695680
git push origin --delete <branch name>
참조 : http://www.gitguys.com/topics/adding-and-removing-remote-branches/
나는 비슷한 문제가 있었다. 답이 도움이되지 않았습니다. 제 경우에는 두 개의 제거 된 원격 저장소가 영구적으로 표시되었습니다.
나의 마지막 아이디어는 손으로 모든 참조를 제거하는 것이 었습니다.
저장소를 "Repo"라고 가정 해 봅시다. 나는했다 :
find .git -name Repo
해당 파일과 디렉토리를 삭제했습니다
grep Repo -r .git
이것은 해당 라인을 제거한 일부 텍스트 파일을 발견했습니다. 이제 모든 것이 괜찮은 것 같습니다.
보통 당신은이 직업을 git에 맡겨야합니다.
나는 몰랐다 git branch -rd
, 이와 같은 문제를 해결하는 방식은 저의 리포지기를 원격 리포지토리로 취급하고 원격 삭제를 수행하는 것입니다. git push . :refs/remotes/public/master
. 다른 방법이 작동하지 않고 제거하고 싶은 이상한 참조가 있다면,이 원시 방식은 확실합니다. 그것은 당신에게 모든 종류의 참조를 제거 (또는 생성) 할 수있는 정확한 정밀도를 제공합니다.
약간 관련이 있지만 여전히 우리가 가진 것과 같은 상황에서 도움이 될 수 있습니다. 우리는 원격 저장소에 네트워크 파일 공유를 사용합니다. 지난 주에 일이 진행되고 있었는데, 이번 주에 우리는 "원격 원산지는 Branch Refs/Heads/Mas
그러나 우리는 부패한 일에 아무것도하지 않았다고 믿었습니다. NFS는 스냅 샷을 수행하므로 각 "이전 버전"을 검토하고 3 일 전에 리포지토리의 MB 크기가 282MB에서 33MB로 진행되었으며 약 1,403 개의 새로운 파일과 300 개의 폴더가 존재하는 것을 보았습니다. 나는 동료들을 물었다. 그리고 그날은 그날 푸시를 시도했다.
NFS "복원"기능을 사용하여 해당 날짜 직전으로 복원했으며 이제 모든 것이 다시 잘 작동했습니다. 나는 이전에 자두를 시도했지만 도움이되지 않는 것 같습니다. 어쩌면 가혹한 정리가 효과가 있었을 것입니다.
이것이 언젠가 다른 사람에게 도움이되기를 바랍니다!
어치