git remote prune – 내가 예상했던만큼 가지 치기 된 가지를 보여주지 않았습니다. origin :staleStuff 그리고 달렸다 git

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

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



답변

을 사용 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) 누락 될 수 있습니다.

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