나는 일반적으로 이미 16 답변이있는 질문에 대답하지는 않지만 다른 모든 답변은 잘못되었으며 정답은 너무 간단합니다. 문제는 "원격에 해당하는 원격 추적 분기가 더 이상없는 모든 추적 분기를 삭제하는 간단한 방법이 있습니까?"
"간단한"이라는 말이 모든 것을 한 번에 삭제하고, 취약하지 않고, 위험하지 않으며, 모든 독자가 갖지 못할 도구에 의존하지 않는다면 올바른 대답은 다음과 같습니다.
일부 답변은 간단하지만 요청 된 내용을 수행하지 않습니다. 다른 사람들은 요청을했지만 간단하지는 않습니다. 모두 텍스트 조작 명령 또는 스크립팅 언어를 통해 Git 출력을 구문 분석하는 데 의존합니다. 일부 시스템에는 없을 수 있습니다. 또한 대부분의 제안은 출력이 스크립트로 구문 분석되지 않는 포셀린 명령을 사용합니다 ( "포슬린"은 사용자 조작을위한 명령을 의미합니다. 스크립트는 하위 레벨 "배관"명령을 사용해야 함).
더 읽을 거리 :
문제의 유스 케이스 (서버에서 삭제되었지만 여전히 로컬 브랜치로 존재하는 가비지 수집 추적 브랜치)의 경우와 상위 레벨 Git 명령 만 사용하여 안전하게 수행하려면
git fetch --prune
(또는 git fetch -p
별칭이거나 git prune remote origin
가져 오지 않고 동일한 작업을 수행하며 대부분의 시간이 아닐 수도 있습니다).
- 삭제 된 것으로보고 된 모든 원격 브랜치에 유의하십시오. 또는 나중에 찾기 위해
git branch -v
(고아 추적 지점은 "[gone]"으로 표시됨).
git branch -d [branch_name]
각 고아 추적 지점에서
(이것은 다른 답변 중 일부가 제안하는 것입니다).
Mark Longair의 답변 과 다른 질문에 대한 답변 과 for-each-ref
같이 솔루션을 스크립팅하려는 경우 시작 지점 이지만 쉘 스크립트 루프를 작성하지 않거나 xargs 또는 무언가를 사용하지 않고 솔루션 을 악용하는 방법을 볼 수 없습니다 .
배경 설명
진행 상황을 이해하려면 지점을 추적하는 상황에서 지점이 하나가 아니라 3 개라는 점을 이해해야합니다. 그리고 "branch"는 단순히 커밋에 대한 포인터를 의미한다는 것을 기억하십시오.
추적 분기가 주어지면 feature/X
원격 저장소 (서버)에이 분기가 있으며이를 호출합니다 feature/X
. 로컬 리포지토리에는 remotes/origin/feature/X
"이것은 원격에서 기능 / X 브랜치가 마지막으로 얘기 한 시간입니다"라고 말한 지점이 있으며 마지막으로 로컬 리포지토리에는 feature/X
최신 커밋을 가리키는 브랜치가 있으며 "track" remotes/origin/feature/X
을 사용하면 당겨서 정렬 할 수 있습니다.
어느 시점에서 누군가가 feature/X
리모컨 의을 삭제했습니다 . 그 순간부터, 당신은 로컬에 남아 있습니다 feature/X
(기능 X에 대한 작업이 아마 끝났기 때문에 더 이상 원하지 않을 것입니다). 그리고 remotes/origin/feature/X
그 목적은 서버 지점의 상태를 기억하는 것이기 때문에 확실히 쓸모가 없습니다. .
그리고 힘내는 자동으로 중복 청소를하게됩니다 remotes/origin/feature/X
거야 - git fetch --prune
하지만 어떤 이유로, 당신이 자동으로 자신을 삭제하지 않습니다 -하지를 feature/X
당신의 ... 비록 feature/X
이 정보를 가지고 있으므로, 여전히 분리 된 추적 정보를 포함 완전히 병합 된 이전 추적 지점을 식별합니다. (결국, 그것은 줄 수있는 당신에게 당신이 손으로 직접 작업을 수행 할 수 있습니다 정보를.)
* master
내 시스템에 있습니다. 다음 명령이 나를 위해 일했습니다 :git branch -d $(git branch --merged |tail -n +2)