prosource

git checkout --track origin/branch와 git checkout -branch origin/branch의 차이

probook 2023. 5. 18. 21:09
반응형

git checkout --track origin/branch와 git checkout -branch origin/branch의 차이

원격 분기를 전환하고 추적하는 이 두 명령의 차이점을 아는 사람이 있습니까?

git checkout -b branch origin/branch
git checkout --track origin/branch

둘 다 원격 지사를 추적해서 변경 사항을 원점에서 지점으로 전송할 수 있을 것 같은데 맞나요?

실질적인 차이가 있습니까?

명령의 효과는 동일합니다(Robert Siemer의 지적에 대한 답변 덕분)

실질적인 차이는 다음과 같은 이름의 로컬 분기를 다르게 사용할 때 발생합니다.

  • git checkout -b mybranch origin/abranch를 생성합니다.mybranch 트랙 랙트origin/abranch
  • git checkout --track origin/abranch됩니다.abranch다른 이름을 가진 분기가 아닙니다.

(즉, Sebastian Graf가 언급한 바와 같이, 지역 지부가 이미 존재하지 않는 경우.
만약 그랬다면, 당신은 필요할 것입니다.git checkout -B abranch origin/abranch)


참고: Git 2.23 (2019년 3분기)에서는 다음과 같은 새로운 명령을 사용합니다.

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(와 함께) 원격 추적 분기를 추적합니다.origin/branch.

원격 추적 분기에서 로컬 분기가 시작되면 Git는 다음과 같이 분기(특히 및 구성 항목)를 설정합니다.git pull원격 병합 분기에서 적절하게 병합됩니다.
이 동작은 전역을 통해 변경될 수 있습니다.branch.autosetupmerge구성 플래그입니다.은 다을사해설재수있정다습니할을 할 수 .--track그리고.--no-track branch 옵션, 에중치를브랜사용하여변경됨나▁using▁g▁laterit▁options,it됨변▁changed경▁and--set-upstream-to.


그리고.git checkout --track origin/branch)와 동일한 작업을 수행합니다.

 # 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-togit1.8.0-rc1 공지 참조)


업스트림 지점을 로컬 지점에 등록하면 다음과 같습니다.

  • 및 에서 두 분기 간의 관계를 표시하도록 git를 지정합니다.
  • 새 분기가 체크아웃될 때 인수 없이 업스트림에서 풀하도록 지시합니다.

자세한 내용은 "기존 분기 추적을 원격 분기로 만드는 방법"을 참조하십시오.

전혀 차이가 없습니다!

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.

보시다시피, 차이가 없습니다.

하지만 훨씬 더 좋아집니다.

3)git checkout branch

또한 와 동등합니다.git checkout -b branch --track origin/branch"filename"이 아직 존재하지 않지만 "filename/filename"이1 존재하는 경우.


세 명령 모두 "분기"의 "업스트림"을 "원점/분기"로 설정합니다(또는 실패합니다).

인수가 없는 참조 지점으로 업스트림이 사용됩니다.git status,git push,git merge그러므로git pull(그렇게 구성된 경우(기본값 또는 거의 기본값).

예.git status에서는 업스트림이 구성되어 있는 경우 업스트림보다 훨씬 뒤떨어져 있거나 앞에 있는 것을 참조하십시오.

git pushgit 2.0 이후에는 기본적으로2 현재 분기를 업스트림으로 푸시하도록 구성되어 있습니다.

1 ...그리고 "리모트"가 "리모트"를 가진 유일한 원격인 경우
2 기본값(이름 "filename")도 두 분기 이름이 동일하도록 적용됩니다.

책은 이러한 명령이 동일한 효과를 낸다는 것을 나타내는 것으로 보입니다.

간단한 사례는 방금 보신 예로 git checkout -b [branch] [remote name]/[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-zshit 완료가 그것을 풀 수 있을 때 특히 유용합니다.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

언급URL : https://stackoverflow.com/questions/10002239/difference-between-git-checkout-track-origin-branch-and-git-checkout-b-branch

반응형