답변:
두 명령은 동일한 효과를 갖습니다 ( Robert Siemer의 답변 덕분에 ).
실질적인 차이점은 다른 이름의 로컬 브랜치를 사용할 때 발생합니다 .
git checkout -b mybranch origin/abranch
만들고 mybranch
추적합니다origin/abranch
git checkout --track origin/abranch
abranch
이름이 다른 분기가 아닌 ' ' 만 만듭니다 .( 세바스찬 그라프 (S Sebastian Graf)의 의견 에 따르면 로컬 지점이 아직 존재 하지 않으면
필요합니다. )git checkout -B abranch origin/abranch
참고 : Git 2.23 (Q3 2019)에서는 새로운 명령을git switch
사용합니다 .
git switch -c <branch> --track <remote>/<branch>
브랜치가 여러 리모트에 존재하고 그 중 하나가
checkout.defaultRemote
구성 변수에 의해 이름이 지정된 경우,<branch>
모든 리모트에서 고유하지 않은 경우에도 명확성을 위해 해당 브랜치를 사용합니다 . 모호하지만 '원점'원격에 존재하는 경우 항상 원격 지점을 체크 아웃
하도록 예checkout.defaultRemote=origin
를 설정하십시오<branch>
.
여기서 ' -c
'는 새로운 ' -b
'입니다.
첫째, 일부 배경 : 추적 은 로컬 지점의 업스트림이 원격 지점으로 설정되었음을 의미합니다.
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
의지:
branch
참조하는 지점으로 작성 / 재설정 합니다 origin/branch
.branch
(을 가진 git branch
)와 원격 지점 추적 추적 origin/branch
. 로컬 브랜치 원격 추적 분기를 시작하면, 힘내 지점 (특히 설정
branch.<name>.remote
및branch.<name>.merge
구성 항목)를 그 정도로git pull
적절 원격 추적 지점에서 합류한다.
이 동작은 전역branch.autosetupmerge
구성 플래그 를 통해 변경 될 수 있습니다 . 이 옵션 은--track
and--no-track
옵션 을 사용하여 재정의하고 나중에 git branch를 사용하여 변경할 수 있습니다--set-upstream-to
.
)와 git checkout --track origin/branch
동일하게 수행됩니다 git branch --set-upstream-to
.
# or, since 1.7.0
git branch --set-upstream upstream/branch branch
# or, since 1.8.0 (October 2012)
git branch --set-upstream-to upstream/branch branch
# the short version remains the same:
git branch -u upstream/branch branch
또한 ' branch
' 의 업스트림을 설정했습니다 .
(참고 : git1.8.0은 더 이상 사용되지 않으며 다음 git branch --set-upstream
으로 대체됩니다 git branch -u|--set-upstream-to
: git1.8.0-rc1 announce 참조 )
로컬 지점에 업스트림 지점을 등록하면 다음과 같은 이점이 있습니다.
git status
git branch -v
를 표시하도록 지시 하십시오 .git pull
인수없이 업스트림에서 끌어 오도록 지시 합니다 .자세한 내용은 " 기존 git 브랜치 트랙을 원격 브랜치로 만드는 방법 "을 참조하십시오.
If <branch>
를 찾을 수 없지만 <remote>
이름이 일치하는 정확히 하나의 원격 (추적)에 추적 분기가 있으며 $ git checkout -b <branch> --track <remote>/<branch>
"
branch.autoSetupMerge
하도록 설정합니다 always
. 이 설정의 기본값은 true
입니다. 즉, 원격 지사를 체크 아웃 할 때만 추적이 수행됩니다. true
로컬로 생성 된 분기에 대한 추적을 설정하지 않습니다.
전혀 차이가 없습니다!
1) git checkout -b branch origin/branch
어떤이없는 경우 --track
더 --no-track
, --track
기본값으로지지 않습니다. 설정으로 기본값을 변경할 수 있습니다 branch.autosetupmerge
.
실제로 1)은 다음과 같이 동작 git checkout -b branch --track origin/branch
합니다.
2) git checkout --track origin/branch
"편의상" --track
없이 -b
의미 -b
와의 인수 -b
추측된다 "지점"이 될 수 있습니다. 추측은 구성 변수에 의해 결정 remote.origin.fetch
됩니다.
실제로 2)는 다음과 같이 동작 git checkout -b branch --track origin/branch
합니다.
보다시피 차이가 없습니다.
그러나 더 좋아집니다.
삼) git checkout branch
또한 동일하다 git checkout -b branch --track origin/branch
"분기"아직 존재하지 않지만 "원산지 / 지사는"않는 경우 1 .
세 명령 모두“branch”의“upstream”을“origin / branch”(또는 실패)로 설정합니다.
업스트림의 기준점으로 사용되는 인수리스 git status
, git push
, git merge
따라서 git pull
(디폴트 또는 거의 기본값 인 (즉, 같은 구성된 경우)).
예를 들어 git status
업스트림에서 어느 정도 앞뒤로 구성되어 있는지 알려줍니다.
git push
git 2.0 이후 기본적으로 현재 분기를 2 업스트림으로 푸시하도록 구성되어 있습니다.
1 ...“origin”이“branch”를 가진 유일한 리모컨 인 경우
2 기본 이름 (“simple”) 도 두 분기 이름이 동일하도록 강제합니다.
이 책 은 그 명령들이 같은 효과를 낸다고 지적하는 것 같습니다.
간단한 사례는 git checkout -b [branch] [remotename] / [branch]를 실행 한 예입니다. Git 버전 1.6.2 이상을 사용하는 경우 --track 속기를 사용할 수도 있습니다.
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
원격 브랜치와 다른 이름으로 로컬 브랜치를 설정하려면 다른 로컬 브랜치 이름을 가진 첫 번째 버전을 쉽게 사용할 수 있습니다.
$ git checkout -b sf origin/serverfix
이것은 bash 또는 oh-my-zsh git 완료가 origin/serverfix
이름 을 가져올 수있을 때 특히 유용합니다. 첨부 --track
(또는 -t
)하고 길을 가고 있습니다.
이 명령으로 새 브랜치를 만들 수 없습니다
git checkout --track origin/branch
준비되지 않은 변경 사항이있는 경우
예를 들면 다음과 같습니다.
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/App.js
no changes added to commit (use "git add" and/or "git commit -a")
// TRY TO CREATE:
$ git checkout --track origin/new-branch
fatal: 'origin/new-branch' is not a commit and a branch 'new-branch' cannot be created from it
그러나 git checkout -b
명령을 사용 하여 비 단계적 변경으로 새 분기를 쉽게 만들 수 있습니다 .
$ git checkout -b new-branch
Switched to a new branch 'new-branch'
M src/App.js
origin/branch
) 을 추적하기위한 것입니다.
origin/new-branch
대신 테스트를합니다 origin/branch
. 알고 계십니까?
git pull
반면 일부 지점은 원격 지점을 가져 오도록 요청할 것입니다. 피어에서 처음으로 만든 원격 분기를 체크 아웃하면 git이 계속 진행되어branch.<BNAME>.remote=origin
로컬 gitconfig에 추가 됩니다. 그런 다음 발행 할 수 있습니다git pull
. 그러나 당신이 브랜치를 만드는 사람git checkout -b BNAME
이라면 git -of-는 알 수 없습니다. 따라서 리모컨을 지정해야합니다.