자식에서 다른 분기로 전환하려면 어떻게해야합니까?


222

이 줄 중 어느 것이 맞습니까?

git checkout 'another_branch'

또는

git checkout origin 'another_branch'

또는

git checkout origin/'another_branch'

그리고이 선들 사이의 차이점은 무엇입니까?



32
git checkout [branch]이 질문에 오는 대부분의 사용자
JGallardo

답변:


225

경우 another_branch이미 로컬에 존재하고이 지점에없는, 다음 git checkout another_branch분기로 전환됩니다.

경우 another_branch존재하지 않지만 origin/another_branch않습니다, 다음 git checkout another_branch에 해당합니다 git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch. 의 업스트림으로 생성 another_branch하여 origin/another_branch설정 origin/another_branch합니다 another_branch.

둘 다 존재하지 않으면 git checkout another_branch오류를 반환합니다.

git checkout origin another_branch대부분의 경우 오류를 반환합니다. 경우 origin개정하고 another_branch다음 그 개정의 파일을 체크 아웃하지만 아마 대부분의 당신이 기대하지 어떤 것을하는 파일입니다. origin대부분에 사용되는 git fetch, git pull그리고 git push원격, 원격 저장소의 URL의 별칭으로.

git checkout origin/another_branchorigin/another_branch존재 하면 성공 합니다. 분기가 아닌 분리 된 HEAD 상태가됩니다. 새 커밋을 수행하면 기존 분기에서 새 커밋에 도달 할 수 없으며 해당 분기 중 어느 것도 업데이트되지 않습니다.

업데이트 :

2.23.0이 릴리스되었으므로 git switch분기를 작성하고 전환하는 데 사용할 수도 있습니다 .

foo존재하는 경우 다음 으로 전환하십시오 foo.

git switch foo

foo존재하지 않는 경우 origin/foo작성 foo하여 origin/foo다음으로 전환하십시오 foo.

git switch -c foo origin/foo
# or simply
git switch foo

더 일반적으로 foo존재하지 않는 경우 foo알려진 참조 또는 커밋에서 생성 한 후 다음으로 전환하십시오 foo.

git switch -c foo <ref>
git switch -c foo <commit>

우리가 같은 시간에 Gitlab과 Github에서의 저장소를 유지하는 경우, 로컬 저장소는 예를 들어 두 개의 리모컨,있을 수 있습니다 originGitlab과 githubGithub에서를 들어. 이 경우 리포지토리에는 origin/foo및이 github/foo있습니다. git switch foo불평 fatal: invalid reference: foo이 심판,있는 알려져 있지 않기 때문에, origin/foo또는 github/foo만들 foo. 필요에 따라 git switch -c foo origin/foo또는 git switch -c foo github/foo필요에 따라 지정 해야합니다. 두 원격 지사 모두에서 지사를 만들려면 새 지사에 고유 한 이름을 사용하는 것이 좋습니다.

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

foo존재하는 경우 알려진 참조 또는 커밋 foo에서 다시 작성 / 강제 작성 (또는 재설정 foo) 한 후 다음으로 전환하십시오 foo.

git switch -C foo <ref>
git switch -C foo <commit>

이는 다음과 같습니다.

git switch foo
git reset [<ref>|<commit>] --hard

알려진 심판 또는 커밋의 분리 된 HEAD로 전환하십시오.

git switch -d <ref>
git switch -d <commit>

분기를 만들고 싶지만 전환하지 않으려면 git branch대신 사용하십시오. 알려진 심판 또는 커밋에서 브랜치를 생성하십시오.

git branch foo <ref>
git branch foo <commit>

24
이 답변 (평소와 upvoted로) 정확하지만 내가 코멘트를 추가 할 것입니다 수 있습니다 도움이 될 수를 다음 git checkout명령은 내 의견으로는, 너무 많은 일을한다. 이것이 여기에 많은 작동 모드가있는 이유입니다. 분기 git checkout전환하는 것이 유일한 방법이라면 대답은 간단하지만 분기 를 만들거나 분기 전환 하지 않고 특정 커밋에서 파일을 추출 할 수도 있습니다 .
torek December

11
이것이 정답이지만 명령 줄에서 git이 어떻게 조여 졌는지 보여줍니다. 분기 체크 아웃 git checkout?
thang

3
@thang 릴리스 2.23.0에서는 해결되었습니다. 이제 git switch지점으로 전환하는 데 사용할 수 있습니다 .
legends2k

이 버전의 git에서는 스위치가 작동하지 않는 것 같습니다. 이 버전의 git에서 다른 분기로 전환하기 위해 무엇을 사용합니까? C : \ widget> git --version git 버전 2.11.0.windows.3 C : \ widget> git 스위치 마스터 git : 'switch'는 git 명령이 아닙니다. 'git --help'를 참조하십시오. C : \ widget>
John

1
@John git checkout은 이전 버전에서도 대신 사용 하며 최신 버전에서도 작동합니다.
ElpieKay

66

자식에서 다른 지점으로 전환. 간단한 대답,

git-checkout-분기 전환 또는 작업 트리 파일 복원

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

브랜치를 전환하기 전에 수정 된 파일이 없는지 확인하십시오.이 경우 변경 사항을 커밋하거나 숨길 수 있습니다.


마지막 명령은 분리 된 HEAD 상태가됩니다. 지점을 편집 할 수 없음을 의미합니다.

2
체크 아웃하려는 브랜치를 가져 오지 않고 체크 아웃하기 전에 페치해야합니다. 지점이 최신 상태이면 가져 오기를 건너 뛸 수 있으며 git checkout branchname 만 사용하십시오.
danglingpointer

지점으로 전환 한 후 "git pull"을 수행하는 것으로 충분하지 않습니까?

pull도 좋아, pull은 백그라운드에서 페치 및 병합을 수행합니다. 나는 diff를 보지 못한다.
danglingpointer

17

[ git checkout "branch_name"]

말하는 또 다른 방법입니다.

[ git checkout -b branch_name origin/branch_name]

"branch_name"이 원격으로 존재하는 경우

[ git checkout -b branch_name origin/branch_name]는 리모컨이 여러 개인 경우에 유용합니다.

[ git checkout origin 'another_branch']에 대해서는 이것이 확실하지 않습니다. AFAK "fetch"명령을 사용하여이 작업을 수행 할 수 있습니다-[ git fetch origin 'another_branch']


다른 분기를 만들기위한 "git checkout -b branchName"명령을 알고 있습니다. 이것은 질문이 아니 었습니다!

10

함께 힘내 2.23 이후, 하나는 사용할 수있는 git switch <branch name>지점을 전환 할 수 있습니다.


6

나를 위해 일한 것은 다음과 같습니다.

필요한 지점으로 전환하십시오.

git checkout -b BranchName

그리고 나서 다음과 같이 "마스터"를 뽑았습니다.

git pull origin master

6

일상 생활에서 유용한 명령 :

git checkout -b "branchname" ->  creates new branch
git branch                   ->  lists all branches
git checkout "branchname"    ->  switches to your branch
git push origin "branchname" ->  Pushes to your branch
git add */filename           -> Stages *(All files) or by given file name
git commit -m "commit message" -> Commits staged files
git push                     -> Pushes to your current branch

5

브랜치가 원격 브랜치를 추적하도록하려면 브랜치에 대한 변경 사항을 커밋하고 변경 사항을 가져 오려는 경우 매우 중요합니다. 실제 체크 아웃에 -t를 추가해야합니다. git checkout -t branchname


4

확인 : git branch -a

지점이 하나만있는 경우 그런 다음 아래 단계를 수행하십시오.

  • 1 단계 : git config --list
  • 2 단계 : git config --unset remote.origin.fetch
  • 3 단계 : git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

2
이 일련의 명령이 다른 지점으로 어떻게 전환되는지 궁금합니다.

이것은 이전에 (매개 변수를 사용하여 ) 얕은 클론 을 수행했을 때 유용 depth하며 이제 error: pathspec 'another_branch' did not match any file(s) known to git위에서 제안한 명령을 사용하여 다른 원격 브랜치를 가져올 수 없는지 궁금 합니다. 그것은 원래의 질문에 관한 것이 아니지만 다른 사람들이 머리를 긁는 데 도움이 될 수 있습니다.
luciash d '

0

나는 이것을 사용하여 한 지점을 다른 지점으로 전환하여 사용할 수있는 사람처럼 매력적으로 작동합니다.

자식 스위치 [branchName] 또는 자식 체크 아웃 [branchName]

예 : 자식 스위치 개발 또는
자식 체크 아웃 개발

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.