git : 헤드를 분리하지 않고 분기 전환


102

메인 브랜치 (마스터)와 일부 실험적인 작업을위한 브랜치가있는 github에 저장소가 있습니다. 나는 약간의 커밋을하고 실험적인 브랜치로 밀어 넣었고 모든 것이 잘되었습니다.

이제 다른 컴퓨터에서 내 저장소 (git clone repository )를 복제 한 다음 실험용 브랜치 (git checkout branchname ) 로 전환하려고 하지만이 작업을 수행 할 때마다 머리가 분리되어 변경 사항을 푸시 할 수 없습니다. 내가 뭘 잘못하고 있죠? 나는 어딘가에 근본적인 자식 개념을 놓치고 있다는 느낌이 들지만 임의의 자식 맨 페이지를 읽는 것은 나에게 단서를주지 못한다.

나는 git을 처음 접했기 때문에 내가 바보라면 미안하지만 내 머리를 다시 붙이는 데 도움이되는 문서를 찾을 수 없습니다.

편집하다

추적 지점의 개념은 내가 놓친 것입니다. 이제 그 개념을 이해 했으므로 모든 것이 명확합니다. 개인적으로 나는 git branch --track구문이 git checkout -b branch-name origin/branch-name.

도와 주셔서 감사합니다!


헤드를 분리하지 않고 분기를 전환하려면 Git 2.23 (2019 년 8 월)을 사용하여 git switch: 아래 내 대답을 참조하십시오 .
VonC

답변:


115
# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

편의상 localname 및 branchname에 동일한 문자열을 사용할 수 있습니다.
체크 아웃 origin/branchname할 때 실제로 브랜치를 체크 아웃하지 않았습니다. origin/branchname"원격"이름이며 다음을 사용하여 목록을 얻을 수 있습니다.

branch -a 

색상을 활성화하면 로컬 분기는 하나의 색상이되고 원격 분기는 다른 색상이됩니다.

스위치로 전환하여 작업 할 수 있으려면 먼저 원격 분기를 로컬로 추적해야합니다.


9
아직 추적되지 않은 경우 "git checkout origin / branchname"이 자동으로 지점을 추적하지 않는 이유는 무엇입니까?
Martin Konicek 2010

4
외국 지점에 대한 로컬 이름이 여전히 필요하기 때문입니다.
Kent Fredric

내가하는 일과 오류 메시지는 다음과 같습니다. $ git checkout -b topic / fetch upstream / topic / fetch fatal : git checkout : update paths is not compatible with switching branch. 커밋으로 해결할 수없는 'upstream / topic / fetch'를 체크 아웃하려고 하셨나요?
ulu

2
색상에 대한 팁을 주셔서 감사합니다. 색상 활성화 방법 :git config --global --add color.ui true
PonyEars 2013 년

1
"origin / branchname"은 문자 그대로 SHA1 또는 그 자체로 SHA1 =)로 해석되는 모든 것이 될 수 있다는 점에 주목할 가치가 있습니다. 나는 정기적으로 그것을 사용하여 임의의 뿌리를 가진 임의의 분기를 만듭니다.
켄트 프레드릭

16
git clone git@github.com:abc/def.git
cd def

이제 추적 분기를 만듭니다.

git branch --track experimental origin/experimental
git checkout experimental

그런 다음 거기에서 일한 후 간단히 github로 푸시하십시오.

git push

3
git branch -t origin / experimental # 너무 많이 입력 할 필요는 없습니다. :)
Dustin

내가 추적하려는 브랜치는 topic / fetch라고합니다. $ git branch --track topic / fetch upstream / topic / fetch를 수행하려고 할 때 치명적 : 유효한 개체 이름이 아닙니다 : 'upstream / topic / fetch'.
ulu

1
@Dustin,이 명령은 로컬 마스터를 추적하는 로컬 브랜치 'origin / experimental'을 만듭니다. 꽤 흔한 실수라고 생각합니다.
PDug

1
@PDug % git checkout -t origin / experimental 브랜치 실험은 리베이스를 통해 오리진에서 실험 된 원격 브랜치를 추적하도록 설정되었습니다. 새로운 브랜치 '실험'으로 전환
Dustin

11

Kent의 답장을 확장하려면 복제를 수행 한 후 (원격은 포함되지 않음) 복제 한 저장소에서 활성화 된 분기 (귀하의 경우 마스터) 만 가질 수 있습니다.

따라서 먼저 원격 실험 브랜치를 추적하기 위해 새 브랜치를 생성해야합니다.

$ git branch experimental origin/experimental

그런 다음 확인하십시오.

$ git checkout experimental

그러나 Kent는 정확합니다.이 두 명령을 결합 할 수 있습니다.

$ git checkout -b experimental origin/experimental

3

Git 2.23 (2019 년 8 월)에서는 다음 명령을 사용합니다.git switch

동일한 이름의 원격 지점이있는 경우 자동으로 추적됩니다.

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.