Git 브랜치 삭제


79

Git에서 분기의 "삭제"는 무엇을 의미합니까?

저장소에서 사라지나요? 아니면 여전히을 통해 탐색 할 수 git branch있습니까?

내가 정말로하고 싶은 것은 브랜치를 "막 다른 끝"으로 표시하는 것입니다. 즉, 브랜치가 마스터와 너무 멀어서 그 브랜치 아래에 좋은 아이디어가 있었지만 누구도이를 시작점으로 사용해서는 안됩니다. 참고 용으로 보관하고 싶습니다.

답변:


157

분기를 삭제할 수 있지만 먼저 태그를 지정하여 기록이 사라지지 않도록합니다. 이렇게하면 브랜치가 브랜치 목록에 표시되지 않으므로 사람들이 작업하는 것을 막을 수 있지만 작업은 영구적으로 지워지지 않습니다 (가비지 수집이 실행 된 후에도). 예를 들어 관련성이 없어진 브랜치가 있지만 영구적으로 삭제할 준비가되지 않은 경우 "archive / < branch-name >" 으로 태그를 지정합니다 .

master또는 다른 지점 에있는 동안 :

git tag archive/foo foo
git branch -D foo

이렇게하면 삭제하기 전에 분기 archive/foo에서 이름이 지정된 태그가 생성 됩니다. 태그에 메시지를 추가하여 브랜치에 무엇이 있는지, 왜 존재했는지, 왜 이제 막 다른 길인지 등을 설명 할 수 있습니다.foofoo

git tag -m 'Foo is deprecated in favor of bar' archive/foo foo

분기가 더 이상 사용되지 않는 이유를 기록하는 기능은 분기를 대체 네임 스페이스로 이동하는 것보다 태그를 지정하는 것의 장점 일 수 있습니다.

이런 방식으로 보관 된 브랜치를 부활시켜야한다면 다음과 같이 간단합니다.

git branch foo archive/foo
git tag -d archive/foo       # Optional

이제 분기가 삭제되지 않은 것처럼 돌아 왔습니다.


5
@sardaukar : 아카이브 태그를 푸시 ( --tags옵션 사용 git push) 한 다음 원격 브랜치를 삭제 ( :<branch-to-delete>푸시하는 동안 refspec 사용)하여 원격 저장소와 함께 작동 할 수도 있습니다 . 예 :git tag archive/foo foo; git branch -D foo; git push --tags origin :foo
Dan Molding

git이 사람들에게 "이 브랜치가 아카이브되었습니다"라고 자동으로 알리고 사람들이 아카이브 브랜치에서 가져 오려고했지만 그렇지 않은 경우 커밋 메시지를 표시하는 방법이 있다면 좋을 것입니다.
Robin Green

1
아주 좋은 대답, 정확히 내가 찾던 것! 확실하게 말하면, 브랜치가 삭제되기 전에 마스터로 다시 병합 된 경우 유용합니까?
claf

또 다른 관련 질문 (누군가가 여전히이 스레드를 따르는 경우)은이 분기에 여러 개발자가 관련된 경우 어떻게 "종료"(마스터 또는 아카이브에서 태그로 병합)해야합니까? 브랜치 (로컬 및 원격)를 제거하고 태그를 지정하는 것이이 브랜치의 다른 개발자들에게 너무 무례하지 않습니까?
claf

1
이 답변이 좋은, 훌륭한 솔루션입니다
크리스토퍼 토마스

2

Git 브랜치는 개정에 대한 참조로 저장됩니다. 분기를 삭제하면 참조가 제거됩니다. 해당 개정판을 참조하는 다른 항목이 없으면 결국 가비지 수집됩니다. 또한 브랜치를 삭제하면 리포지토리에서 제대로 사라집니다. 분기를 더 이상 사용되지 않음으로 표시하고 나중에 사용할 수 있도록 유지하려면 분기를 하위 디렉토리로 이동할 수 있습니다.

$ git branch
* master
  testing_feature_one
  testing_feature_two
$ git branch -m testing_feature_one deprecated/testing_feature_one
$ git branch
  deprecated/testing_feature_one
* master
  testing_feature_two

또는 더 이상 사용되지 않는 브랜치에 대한 별도의 저장소를 생성하고이를 가져와 원본에서 삭제할 수 있습니다. 두 경우 모두 브랜치를 팔로우하는 모든 사용자에게 영향을 미칠 것입니다. 저장소의 내용은 변경되지 않고 브랜치 이름도 변경되지 않지만 다시 가져 오려고하면 구성에서 대상을 변경해야합니다.



0

git 브랜치를 통해 탐색 할 수 없으며 가비지 수집이 수행 될 때까지 저장소에서 손실되지 않습니다.

문제의 브랜치를 막 다른 골목으로 표시하고 싶다면 그냥 그렇게하세요 (git가 당신을 위해 이것을 할 수는 없지만 확실히 할 수 있습니다)!

(원하는 방식으로) 역사 참고 자료로 레이블을 지정하면 작동합니다.

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