2011-06-11 3 views
4

같은 이름의 원격 지사를 가져,하지만 내 지점 이름은 예를 들어, 원격 이름으로 시작되지 않습니다I 원격에서 분기를 가져 오기 할

git checkout -b BRANCH origin/BRANCH 
그것은 어떤 경우에 작동

하지만 일부에서 경우는이 오류를 얻을 :

fatal: git checkout: updating paths is incompatible with switching branches. 

내가 원격이 지점을 가지고 있음을 확신하고이 작동하는 동안 :

git checkout -b origin/BRANCH 

그쪽으로 후 t, 나는 다른 브랜치로 전환하고 브랜치로 BRANCH와 BRANCH로 이름을 바꾼 다음 다시 BRANCH로 전환해야합니다 ... 그 오류의 의미를 알고 싶습니다.

답변

10

이 때문에 오류 메시지가 표시됩니다.

git checkout 두 가지 중 하나를 수행 할 수 있습니다. 분기를 지정하고 경로를 지정하지 않으면 현재 분기를 지정한 분기로 전환합니다. 당신이 어떤 경로를 제공하면 주어진 지점에서 지점을 지정하면

git checkout mybranch # switch to branch 'my branch' 

후 자식은 어느 인덱스에서 해당 경로를 체크 아웃 또는 것입니다.

git checkout myfile # checkout 'myfile' from index 

여기서 알 수있는 것처럼 잠재적 인 모호성이 있습니다. myfile이라는 지사 또는 mybranch이라는 파일이있는 경우 어떻게해야합니까?

git에서이 모호성을 해결하는 방법은 매개 변수가 먼저 분기와 일치하는지 테스트하고 그렇지 않으면 매개 변수가 파일을 참조한다고 가정합니다. 동일한 이름의 파일과 브랜치가 있다면 git이 매개 변수를이 구문으로 파일로 처리하도록 할 수 있습니다. 당신이 checkout의 지점 전환 양식을 사용하는 경우와 인덱스에서 지정된 파일을 체크 아웃하는하지 않을 경우

git checkout -- myfile # treat 'myfile' as a file 

새로운 지점을 생성하는 -b 옵션은 만 유효합니다.

git checkout -b newbranch myfile # Illegal. I can't use `-b` when 
            # I'm checking out files. 

당신이 git checkout -b newbranch origin/BRANCH을 시도하고 당신이 그것을 origin/BRANCH은 당신이 그렇게 자식이 당신이 파일을 참조해야한다는 가정이있는 모든 지점의 이름과 일치하지 못했음을 의미합니다이 오류가 발생합니다.

당신이 할 수있는 원격 지점 참조를 표시하려면 git branch -r. 존재해야한다고 생각되는 가지에 대한 참조가없는 경우 git fetch을 수행하여 원격에서 검색해야 할 수도 있습니다.

-b을 제공하지만 새 분기를 기반으로하는 분기 이름이없는 경우 자식은 HEAD 즉, 현재 체크 아웃 된 분기가 설정된 커밋을 사용하도록 기본값 설정됩니다.

git checkout -b origin/BRANCH 

이 현재 커밋에 따라 origin/BRANCH라는 새로운 지역 지점을 만듭니다. 이것은 기껏해야 혼란을 야기 할 수 있으며 원하는대로 들리는 것은 아닙니다.

+0

고맙습니다. 매우 완벽한 답변입니다. – saeedgnu

2

git checkout은 일부 저장소로 전환되지만 원격 저장소에서 패치를 가져 오지 않습니다. git checkout -b도 분기를 만듭니다. 원격 저장소에서 브랜치를 검색하려면 git fetch을 사용하십시오.

+0

Aaah, 그래서 나는'git checkout -b BRANCH origin/BRANCH' 전에'git fetch origin'을 실행해야합니다. 고마워, 내 문제가 해결되었습니다. (나는 * fetch *의 의미를 오해했다) – saeedgnu

+2

예. 최신 버전의 자식에서는'git checkout BRANCH'로 단축 할 수 있습니다. – svick

+0

다른 리모컨 (원점이 아님)이 아님 – saeedgnu