git remote prune – 내가 예상했던만큼 가지 치기 된 가지를 보여주지 않았습니다.


113

man 페이지에서 :

Deletes all stale tracking branches under <name>.
These stale branches have already been removed from the remote repository
referenced by <name>, but are still locally available in "remotes/<name>".

그래서 저는

git push origin :staleStuff

그리고 달렸다

git remote prune origin

그러나 단 하나의 로컬 분기 만 정리되었습니다. 이 지점 중 일부는 제가 직접 만들고 일부는 동료가 만들었습니다. 이것은 처음에 해당 분기를 올바르게 추적하지 않았 음을 의미합니까?


7
어떤 가지가 제거 될지 알아 내기 위해 당신은 할 수 git remote show origin있고 표시된 가지를 찾을 수 있습니다stale
Someone Somewhere

답변:


189

을 사용 git push origin :staleStuff하면 자동으로 제거 되므로을 origin/staleStuff실행 git remote prune origin하면 다른 사람이 제거한 일부 분기를 정리 한 것입니다. 이제 동료 git prune가 제거한 분기를 제거하기 위해 실행해야 할 가능성이 더 큽니다 .


그래서 정확히 무엇 git remote prune입니까? 주요 아이디어 : 로컬 브랜치 (추적 브랜치 아님)는 git remote prune명령으로 건드리지 않으며 수동으로 제거해야합니다.

이제 더 나은 이해를위한 실제 사례 :

2 개의 브랜치가있는 원격 저장소가 있습니다 : masterfeature. 두 브랜치에서 작업하고 있으므로 결과적으로 로컬 저장소에 이러한 참조가 있다고 가정합니다 (혼란을 피하기 위해 전체 참조 이름이 제공됨).

  • refs/heads/master(짧은 이름 master)
  • refs/heads/feature(짧은 이름 feature)
  • refs/remotes/origin/master(짧은 이름 origin/master)
  • refs/remotes/origin/feature(짧은 이름 origin/feature)

이제 일반적인 시나리오 :

  1. 일부 다른 개발자는에서 모든 작업을 완료하고 feature이를 병합하고 원격 저장소에서 분기를 master제거 feature합니다.
  2. 기본적으로 수행 할 때 git fetch(또는 git pull) 로컬 저장소에서 참조가 제거되지 않으므로 해당 4 개의 참조가 모두 있습니다.
  3. 정리하고 실행하기로 결정합니다 git remote prune origin.
  4. 자식은 감지하지 feature그래서 가지가 더 이상 존재하지 refs/remotes/origin/featureA는 부실 제거해야 지점입니다.
  5. 지금 당신은을 포함, 3 개의 참조를 가지고 refs/heads/feature있기 때문에, git remote prune어떤 제거하지 않습니다 refs/heads/*참조.

branch.<branch_name>.merge구성 매개 변수 로 원격 추적 분기와 연관된 로컬 분기를 식별 할 수 있습니다 . 이 매개 변수는 실제로 작동하는 데 필요하지 않으므로 (아마 제외 git pull) 누락 될 수 있습니다.

(댓글의 예제 및 유용한 정보로 업데이트 됨)


나는 상황을 다음과 같이 이해했습니다. 브랜치는 여전히 로컬에 있지만 원격 저장소에서 제거되었습니다. 이제 원격지에 존재하지 않는 모든 로컬 브랜치를 제거하고 싶으므로 git prune을 실행합니다. 이것이 "이 오래된 분기는 이미 원격 저장소에서 제거되었습니다"라고 저에게 말합니다. 내가 잘못?
Felixyz 2010

3
당신 말이 맞아요.하지만 당신은 "로컬 브랜치"의 의미를 오해했을 수도 있습니다 git prune. 의 가지만 가지 /refs/remotes/<remote_name>/치기 대상입니다. 의 모든 분기는 /refs/heads/건드리지 않습니다. 수동으로 관리해야합니다.
최대

아하, 그게 참으로 생각했던 것입니다. 그래서 내가 원하는 것을 할 수있는 방법이 없습니다. 원격 분기를 추적하는 헤드의 모든 분기가 삭제되었는지 확인하여 자동으로 삭제합니까?
Felixyz 2010

2
이를위한 내장 명령은 없지만 이러한 스크립트를 직접 작성할 수 있습니다. 추적 분기는 branch.<branch_name>.merge구성 매개 변수의 존재로 식별 할 수 있습니다 .
최대

이 답변은 댓글의 정보를 답변 자체에 추가하여 @Felixyz와 동일한 오해를 가진 모든 사람이 답변을 재미있게보고 마지막으로 이해를 얻기 위해 댓글을 읽을 필요가 없도록 답변 자체에 추가하면 더 좋을 것입니다. .
Akrikos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.