Git에서 콜론 (: <branch>)을 사용하여 원격 분기를 삭제하는 이유


81

Git이 사용하는 이유

git push <remote> :<branch>

에서와 같이

git push origin :featureA

지점을 삭제하려면 featureA원격 서버에서 ?

콜론이 삭제 플래그로 사용 된 이유에 관심이 있습니다.

.NET과 너무 다릅니다 git branch -d <localbranch>.

우리는 왜 이렇게하지 않습니까?

git branch -d --remote origin <branchname>

아니면 내가 몰랐던 콜론 기호 뒤에 더 깊은 의미가 있습니까?


3
원격 지점 삭제를 들어, 예쁜 구문 지금 거기git push origin --delete foobar
케찰코아틀

답변:


91

그것은 :그 자체 의 의미가 아니라 존재하거나 그 앞에없는 것입니다.

refspec 형식은 다음과 같습니다.

<+><source>:<destination>

(선택 사항 + 비 빨리 감기)

그래서 당신이 뭔가를 할 때 git push origin :featureA, 당신은 빈 소스 참조를 지정하고 기본적으로 대상을 "비어"만들거나 삭제합니다.

추신 : refspec of :or nothing은 아무것도 밀어 붙이는 것을 의미하지는 않습니다. "일치하는"브랜치를 푸시하도록 git을 만듭니다. 로컬 측에 존재하는 모든 브랜치에 대해 동일한 이름의 브랜치가 이미 원격 측에 존재하면 원격 측이 업데이트됩니다.


5
Git> = 1.7.0이 추가 git push origin -d <branch>되어 git push origin -D <branch>원격 브랜치 를 삭제하고 강제 삭제합니다.
robsn

그래서 당신은 언제 무엇을 넣을 것입니까 :?
ITIA

로컬 브랜치가 원격 브랜치와 다른 이름을 가질 때 @ITIA.
listerreg

20

콜론은 "삭제 플래그"가 아닙니다. 참고 자식 푸시자식 풀 모두 최종 인수 (들)로 0 개 이상의 refspecs에 동의합니다. 이제 refspec에 대해 읽어보십시오 . 콜론은 참조 사양에서 소스와 대상을 구분합니다. 이 명령 git push origin :foo은 소스가 비어 있으며 기본적으로 " 원점 foo 분기에 아무것도 푸시 하지 않음 ", 즉 "원점에 분기 foo가 존재하지 않음"이라고 말합니다.


IMO, 귀하의 답변은 다음과 같은 이유로 질문에 대한 답변이 아닙니다. 역사가 갈라진 지점을 밀려 고하면 지점을 강제로 밀어야합니다. 그러나을 사용하여 분기를 삭제할 때는 그렇지 않습니다 :foo. 빈 브랜치는 기존 원격 브랜치와 히스토리를 공유하지 않으므로 내가보기에 기존 원격 브랜치를 빈 브랜치로 덮어 쓸 수 없습니다. 답변에 문제가있는 것 같습니다.
Umang 2011 년

3
@Umang : afaik, 그것은 단지 개념적인 일이고 나는 "빈 가지를 밀어 라"라고 말하지 않았다. 나는 "아무것도 누르지 않는다"고 말했다. "+"가 앞에있는 것이 더 합리적이라는 귀하의 평가에 동의하지 않지만 이것이 작동 방식입니다. 내가 게시 한 refspecs 링크 의 마지막 섹션 을보고 저자를 신뢰하는지 여부를 결정하십시오.
Ryan Stewart

이제 조금 더 잘 이해 한 것 같아요. 감사!
Umang 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.