Git 브랜치는 어떻게 작동합니까? 마스터 브랜치를 제거 할 수 있습니까?


22

개발 및 생산이라는 두 가지 지점이있는 프로젝트가 있습니다. 나는 마스터 브랜치를 사용하지 않고 git status그것을 쓸 때 마다 내 브랜치가 마스터보다 얼마나 멀리 떨어져 있는지 알려줍니다.

마스터 브랜치를 삭제하려고 git branch -d master하면 원격 git 서버가 아닌 로컬 리포지토리에서만 삭제합니다. 어떤 아이디어?

답변:


34

Git에서 브랜치는 명령 된 커밋 목록 (일명 : 체크인)입니다. 새로운 사용자에게는 약간 혼란 스러울 수있는 것은 브랜치에 이름이 필요하지 않다는 것입니다 (대부분의 상황에서 원하는 이름이 필요합니다). 특정 브랜치에는 특별한 것이 없습니다 ( master브랜치는 리포지토리를 초기화 할 때 생성되는 기본 브랜치입니다).

당신은 아마 이것을 이미 알고 있지만, Git은 인기있는 "Subversion"과 같은 다른 버전 제어 시스템과는 다릅니다. 왜냐하면 모든 "작업 카피"(Subversion 언어)는 그 자체의 저장소이기 때문입니다. 사실, 특별히 아무것도 없습니다. 특정 사본에 대한 특별; 단 하나의 사본이 일반적으로 최종 제품을 저장하는 데 사용되는 "정식"사본으로 합의 된 경우를 제외하고.

따라서 귀하의 질문으로 돌아 가면 로컬 복사본을 시작할 때 복제 한 "표준"저장소에는 기본적으로 "마스터"분기가 포함되어 있습니다. 그리고 그것은 붙어 있습니다. 이제 마스터 리포지토리가 포함 된 컴퓨터에 액세스 한 경우 로그인하여 실행할 수 있습니다.

git branch -d master

그러나이를 수행 할 수없는 경우 여전히 로컬 시스템에서 수행 할 수 있습니다. 이 git branch명령에는 -r원격 저장소에 영향을주는 옵션이 있습니다. 즉, 다음 명령을 실행하면 작동합니다.

git branch -d -r master

두 경우 모두에 유의하십시오. master귀하의 지역 사본이 현재 위치한 개발 기록에 완전히 통합 되었다고 가정합니다 . master이전에 사용한 적이없는 경우 (예 : development또는에 체크인 한 적이 있음 production) 걱정할 필요가 없습니다. 그러나 귀하 (또는 다른 사람)가의 정보를 체크인 master한 경우 문제가있을 수 있습니다. 당신은을 변경하여 삭제를 강제 -d-D위의 명령에; 그러나 master미리 무엇이 있는지 확인하는 것이 좋습니다 . 원격 컴퓨터에 액세스 할 수 없으면 원격 컴퓨터를 복구 할 수 없습니다!


그건 그렇고; Git을 처음 접하는 사람이라면 John Wiegley의 Bottom Up에서 Git을 읽는 것이 좋습니다 . 이 기사를 찾기 전에 Git을 조금만 사용해 보았지만 읽을 때까지 어떻게 작동했는지 이해하지 못했습니다. 매우 유용합니다!


3
원래 의견을 쓴 후 얼마 지나지 않아 git의 동작이 약간 변경되었습니다. git 1.7.12부터 git branch -d -r master더 이상 원격 브랜치를 삭제하지 않습니다. 원격 브랜치에 대한 로컬 사본의 지식을 삭제합니다. 다음 번 git fetch에 지점이 돌아옵니다! 대신을 실행하고 싶을 것 git push origin :master입니다. 기본적으로 여기서 수행하는 작업 :은 원격 브랜치 ( :.
mparker17

또한 저장소를 복제 할 때 일반적으로 마스터를 체크 아웃하는 것이 기본입니다. 이것은 복제하려는 저장소의 HEAD 참조에 따라 다릅니다. 따라서 마스터가 삭제 된 후 HEAD가 기본으로 원하는 분기를 가리키는 지 확인하십시오.
Zitrax

에 대한 귀하의 링크를 아래에서 위로 힘내 사망했다, 그러나 보인다 이것은 당신이 확인하고 어쩌면 대답에 링크를 업데이트 할 수 (?) 당신이 언급하는 텍스트입니다?
또는 매퍼

또는 매퍼 : 그것은 내가 말하는 텍스트입니다 : 새로운 링크에 감사드립니다! 답변의 링크를 업데이트했습니다.
mparker17

4

mastergit의 기본 분기입니다. git이 마스터로부터 얼마나 떨어져 있는지 알려 주면 왜 그렇게 끔찍한 지 모르겠지만 원격 저장소에서 분기를 삭제하려면 로컬로 삭제하는 것만으로는 충분하지 않습니다. 대신 이것을 시도하십시오 :

git push origin :master

이렇게하면 (콜론 앞 부분) 아무것도 오리진 서버에 푸시하고 마스터를 덮어 쓰지 않습니다. 즉, 마스터 분기를 원격으로 삭제해야합니다.


나는 얻는다 : remote : error : 현재 브랜치를 삭제하는 것을 거부한다 : refs / heads / master To github.com ***. git! [원격 거부 됨] 마스터 (현재 지점 삭제 금지) 오류 : 일부 ref를 ' github.com ***. git' 로 푸시하지 못했습니다
Totty.js

1
@Totty 아마도 도움이 될 것입니다 : matthew-brett.github.io/pydagogue/gh_delete_master.html
MEM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.