원격 Git 브랜치를 어떻게 생성합니까?


3128

업스트림 '푸시'하려는 로컬 브랜치를 만들었습니다. 스택 오버플로에서 새로 만든 원격 분기를 추적하는 방법에 대한 비슷한 질문이 있습니다.

그러나 내 워크 플로는 약간 다릅니다. 먼저 로컬 지점을 만들고 싶습니다. 만족스럽고 지점을 공유하고 싶을 때만 업스트림을 푸시합니다.

  • 어떻게해야합니까? (내 Google 검색에는 아무것도 나타나지 않는 것 같습니다).
  • 동료에게 업스트림 저장소에서 가져 오도록하려면 어떻게해야합니까?

업데이트 Git 2.0에는 아래에 쓴 간단한 답변 이 있습니다. https://stackoverflow.com/a/27185855/109305


14
아무도 당신에게 두 번째 질문에 대답 했습니까? >> 그리고 동료들에게 업스트림 저장소에서 가져 오라고 어떻게 말합니까?
— milkplus


1
@milkplus get fetch --all는 원격 측에서 새 분기를 가져 오지만 get fetch --prune삭제 된 원격 분기에 대한 참조는 로컬에서 삭제합니다. 나는 이것이 자동으로 설정되거나 구두로 말해야한다고 생각합니다.
— peterh-Reinstate Monica

답변:


3732

먼저 지점을 로컬로 만듭니다.

git checkout -b <branch-name> # Create a new branch and check it out

원격 지점은 원격 서버로 푸시하면 자동으로 생성됩니다. 따라서 준비가되면 다음과 같이하면됩니다.

git push <remote-name> <branch-name> 

where <remote-name>는 일반적으로 origingit이 복제 한 리모컨에 부여하는 이름입니다. 그런 다음 동료는 해당 지점을 당기면 로컬로 자동 생성됩니다.

그러나 공식적으로 형식은 다음과 같습니다.

git push <remote-name> <local-branch-name>:<remote-branch-name>

그러나 하나를 생략하면 두 가지 이름이 동일하다고 가정합니다. 이것을 경고 의 한마디로 말하면 :<remote-branch-name>(콜론으로) 만 지정하는 중대한 실수를하지 않으면 원격 지점이 삭제됩니다!

후속 git pull작업에서 수행 할 작업을 알기 위해 대신 다음을 사용할 수 있습니다.

git push --set-upstream <remote-name> <local-branch-name> 

아래 설명 --set-upstream된대로이 옵션은 업스트림 분기를 설정합니다.

최신이거나 성공적으로 푸시 된 모든 브랜치에 대해 인수가없는 git-pull (1) 및 기타 명령에서 사용하는 업스트림 (추적) 참조를 추가하십시오.


85
git의 기본 동작은 일치하는 참조 를 푸시 하는 것이므로 git push <remote>분기가없는 경우 분기를 푸시하지 않습니다 <remote>.
— Jakub Narębski

222
git push -u <remote-name> <branch-name>차후에 수행 git pull할 작업을 알 수 있도록 대신 사용할 수 있습니다 .
— Bart Schuller

87
서버 이름을 명시 적으로 지정하는 대신 origin, "이 저장소의 나머지 부분을 가져온 서버"를 의미하는을 사용할 수 있습니다 git push origin <branch-name>.
— lambshaanxy

68
-u옵션 사용을 잊어 버린 경우 git push -u지점에 나중에 입력 git pull하면 작동합니다.
— Jan

90
그것을 모두 정리하면 git push -u origin <local-branch-name>나를 위해 일한 것입니다.
— Samo

880

먼저 지점을 로컬로 만들어야합니다

git checkout -b your_branch

그런 다음 지점에서 로컬로 작업하고 지점을 공유 할 준비가되면 지점을 밀어 넣습니다. 다음 명령은 지점을 원격 저장소 원점으로 푸시하고 추적합니다.

git push -u origin your_branch

팀원은 다음을 수행하여 지점에 도달 할 수 있습니다.

git fetch
git checkout origin/your_branch

git push에 인수를 전달하지 않고 언제든지 브랜치에서 작업하고 푸시 할 수 있습니다 (인수없는 git push는 마스터를 원격 마스터로, your_branch 로컬을 your_branch로 원격으로 푸시합니다 ...)

git push

팀원은 커밋을 수행하여 지점으로 푸시 한 다음 명시 적으로 푸시 할 수 있습니다.

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

또는 git push에 대한 인수를 피하기 위해 분기를 추적

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push

같은 이름의 로컬 브랜치를 만들지 않고 원격 브랜치를 만드는 방법이 있습니까?
— Ariel Gabizon

330

간단한 Git 2.0 이상 솔루션 :

현재 망할 놈의 2.0 동작은 간단되었다 :

push.default = current인생을 더 쉽게하기 위해 git을 구성 할 수 있습니다 :

나는 이것을 추가하여 이제 새로운 브랜치를 업스트림으로 밀어 넣을 수 있습니다.

$ git push -u

-u같은 이름의 원격 지점을 추적합니다. 이제이 구성으로 git push에 대한 원격 참조를 자동 추측합니다. 에서 git.config 문서 :

push.default

참조 스펙이 명시 적으로 지정되지 않은 경우 git push가 수행 할 조치를 정의합니다.

push.default = current-현재 분기를 눌러 수신 측에서 동일한 이름의 분기를 업데이트하십시오. 중앙 및 비 중앙 워크 플로 모두에서 작동합니다.

나에게 이것은 일상적인 Git 워크 플로를 단순화 한 것입니다. 구성 설정은 지점을 로컬로 추가하고 원격으로 생성하려는 '일반적인'사용 사례를 처리합니다. 또한 git co remote_branch_name( --set-upstream-to플래그 를 사용 하는 것과 달리) 그냥 원격으로 로컬 브랜치를 만들 수 있습니다 .

이 질문에 대해 잘 알고 있으며 대답은 다소 오래되었지만 동작이 변경되어 이제 작업 과정을 단순화하기 위해 구성 옵션이 존재합니다.

전역 Git 구성에 추가하려면 명령 행에서 다음을 실행하십시오.

$ git config --global push.default current

5
나는 여기 에 git push -u origin HEAD답 을 입력 할 때 너무 많이 쓰지 않고 좀 더 장황한 (당신이하고있는 것을 쓰십시오) 것을 알았습니다. 또한 분기가 다음과 같이 생성 된 경우 추가 인수 없이는 작동하지 않았습니다.git push -u-t
— Qw3ry

git config --global push.default upstream && git checkout -b foo && <change a file> && git push -u작동하지 않습니다 (git 2.19.1 기준); push에는 원격 및 분기 인수가 필요합니다.
— 11:37에

당신이 의미하는 바를 확장 할 수 git co remote_branch_name있습니까?
— flannelbeard

84

이전 답변에서 언급했듯이

git push <remote-name> <local-branch-name>:<remote-branch-name>

지역 지점을 추진하기에 충분합니다.

동료는 다음 명령을 사용하여 모든 원격 분기 (새 분기 포함)를 가져올 수 있습니다.

git remote update

그런 다음 지점에서 변경하려면 일반적인 흐름을 수행하십시오.

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>

이 때문에 원격 이름이 로컬 이름과 다를 수 있습니다.
— Ariel Gabizon

66

현재 분기를 기반으로 로컬로 새 분기를 만듭니다.

git checkout -b newbranch

평소대로 변경 사항을 적용하십시오. 그런 다음 상류로 밀어 넣으십시오.

git push -u origin HEAD

이것은 현재 브랜치를 같은 이름의 브랜치로 푸시 origin하고 추적 origin HEAD하여 나중에 지정할 필요가 없도록 하는 지름길 입니다.


4
이것은 내 경우에 도움이되었습니다 git push -u origin HEAD. 가장 확실한 방법이라고 생각합니다.
— Scadge

2
예, 마지막으로 지점으로 입력 한 것을 기억하지 못하므로 이것이 바로 갈 길입니다.
— marksyzm

4
@marksyzm 현재 어떤 브랜치 나 이름을 기억하지 못한다면 전혀 추진하지 않아야합니다! 적어도 git status먼저 실행하지 않고서는 안됩니다 .
— Zenexer

1
그래, 세상이 그 푸시에 폭발하지 않도록해야합니다; 동의한다.
— marksyzm

1
이것은 원격 지점뿐만 아니라 추적 지점을 동시에 만드는 가장 효율적인 방법입니다. 또한 git remote show origin새로운 추적 / 추적 관계를 시각화하기 위해 세 번째 단계 로 추가하고 싶습니다 .
— hb5fa

54

현재 브랜치에서 브랜치를 만들려면

git checkout -b {your_local_branch_name} 

당신은 원격 지점에서 지점을 원한다면, 당신은 시도 할 수 있습니다

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

변경이 완료되면 파일을 추가 할 수 있습니다.

git add -A or git add <each_file_names>

그런 다음 로컬 커밋을 수행하십시오.

git commit -m 'your commit message'

원격 저장소로 푸시하려는 경우

git push -u origin <your_local_branch_name>

모두 함께

git checkout -b bug_fixes 

또는 원격 지점에서 지점을 만들려면 개발 이라고 말하십시오.

자식 체크 아웃 -b bug_fixes origin / development

다음을 통해 지점으로 원격 리포지토리로 푸시 할 수 있습니다.

git push -u origin bug_fixes

언제든지 다른 지점에서 master 라고하는 지점을 업데이트하려고합니다 .

git pull origin master.


46

실제로 로컬 브랜치를 가지지 않고 원격 브랜치를 만들려면 다음과 같이 할 수 있습니다.

git push origin HEAD:refs/heads/foo

리모컨에 존재하지 않는 foo 분기로 HEAD가 무엇이든 푸시합니다 .


이렇게하면 Visual Studio가 올바르게 시작되지 않는 지점까지 완전히 혼란 스럽습니다. 팀 탐색기는 전혀로드되지 않지만 다른 모든 것은 또한 오류를 던지는 본커에게 갔다. 참고로
— Josh

이것은 작동하는 것처럼 들리지만 실제로 시도했을 때 gitlab 서버는 결과를 브랜치로 인식하지 못했습니다.
— JosephH

원격에서 foo가 분기 된 지점은 무엇입니까? foo2를 foo2에서 분기하려면 어떻게해야합니까? 가능합니까? 감사합니다.
— user674669

gerrit 서버에서도 작동하며이 명령 이전에는 존재하지 않았던 원격에 새 분기를 만듭니다.
— MichaelZ

33

가장 쉬운 해결책 ... 드럼 롤 ... 자식 버전 2.10.1 (Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

NB-로컬 환경에서 방금 만든 지점과 푸시하려는 원격 존재하지 않는 지점은 이름이 같아야합니다 .


3
제안 해 주셔서 감사합니다. 이것을 쉬운 솔루션이라고하더라도 여전히 git push -u더 쉬운 방법 이라고 생각 합니다. 하나의 전역 구성 라인이 필요합니다. stackoverflow.com/a/27185855/109305를 참조하십시오. . . 나는 git push -u지속적으로 사용 하며, 작업 할 때 유스 케이스의 99 %를 차지합니다.
— Jesper Rønn-Jensen

29

[빠른 답변]

2 개의 가파른 곳에서 할 수 있습니다 :

1.를 사용하여 checkout로컬 분기를 만듭니다.

git checkout -b yourBranchName

2.push 명령을 사용하여 분기를 자동 생성하고 코드를 원격 저장소로 보냅니다.

git push -u origin yourBanchName

이 작업을 수행하는 여러 가지 방법이 있지만이 방법은 정말 간단하다고 생각합니다.


1
빠르고 요점까지!
— Dev

26

먼저 지점을 로컬로 만듭니다.

git checkout -b your_branch

그런 다음 원격으로 분기를 만들려면

git push --set-upstream origin your_branch

참고 : 이것은 최신 버전의 git에서 작동합니다.

$ git --version
git version 2.3.0

건배!


이것은 git push원격으로 로컬 지점을 추적하지 않을 때 명령에 의해 생성 된 도움말 텍스트 입니다.
— nurettin

18

로컬 머신에 브랜치를 생성하고이 브랜치를 전환합니다 :

$ git checkout -b [name_of_your_new_branch]

github에서 분기를 푸시하십시오.

$ git push origin [name_of_your_new_branch]

지점에서 무언가를 저 지르려면 지점에 있어야합니다.

다음을 사용하여 만든 모든 분기를 볼 수 있습니다.

$ git branch

표시 할 내용 :

* approval_messages
  master
  master_clean

지점에 새 리모컨을 추가하십시오.

$ git remote add [name_of_your_remote] 

커밋에서 브랜치로 변경 사항을 푸시하십시오.

$ git push origin [name_of_your_remote]

공식 저장소의 원래 지점이 업데이트되면 지점을 업데이트하십시오.

$ git fetch [name_of_your_remote]

그런 다음 브랜치가 개발에서 파생 된 경우 병합 변경 사항을 적용해야합니다.

$ git merge [name_of_your_remote]/develop

로컬 파일 시스템에서 분기를 삭제하십시오.

$ git branch -d [name_of_your_new_branch]

파일 시스템에서 로컬 브랜치를 삭제하려면 :

$ git branch -D [name_of_your_new_branch]

github에서 분기를 삭제하십시오.

$ git push origin :[name_of_your_new_branch]

여기에 모든 정보

다른 기존 프로젝트


14

기존 지점에서 로컬 지점 만들기 (마스터 / 개발 / 다른 지점 일 수 있음)

자식 체크 아웃 -b branch_name

이것을 원격으로 밀어

자식 푸시 -u remote_name local_branch_name : remote_branch_name

여기,

  1. -u : 업스트림 분기를 설정합니다
  2. remote_name : git은 저장소를 만들 때 기본적으로 이름을 "origin"으로 설정합니다. 그러나 다른 임의의 이름으로 변경할 수 있습니다.
  3. local_branch_name : 푸시 할 로컬 브랜치의 이름입니다.
  4. remote_branch_name : 원격에서 작성하려는 원격 브랜치의 이름입니다.

로컬 및 원격 지점 이름을 제거하면 형식이

자식 푸시 -u remote_name branch_name

로컬 브랜치를 branch_name과 동일한 이름으로 원격으로 푸시합니다. 로컬 지점도 원격 지점을 추적합니다.


10

이 질문에 대한 답은 잘 알고 있지만 "myNewBranch"라는 새 브랜치를 만들고 원격 (필자의 경우 "origin")으로 푸시하고 추적을 설정하기 위해 취한 단계를 나열하고 싶었습니다. 이것을 "TL; DR"버전으로 생각하십시오. :)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch

8

이제 git을 사용하면 올바른 지점에있을 때 입력 할 수 있습니다

git push --set-upstream origin <remote-branch-name>

git은 당신을 위해 원점을 만듭니다.


1
-u는 --set-upstream의 줄임말입니다. 따라서 명령은 git push -u origin <remote-branch-name> 일 수 있습니다.
— Uncaught Exception

치명적인 : 'origin'은 자식 저장소가 아닙니다.
— Dmitry Grinko

어쩌면 당신은 당신의 자식 저장소의 원점을 설정해야합니다
— 마우리 사람 Brioschi

8

그 동안 추가하고 싶었습니다.

git checkout -b {branchName}

새 분기를 작성하고 해당 분기를 체크 아웃하여 현재 분기로 만듭니다. 어떤 이유로 든 분기에서 분리하지만 현재 분기로 만들지 않으려면 다음 명령을 사용하십시오.

git branch {branchName}

첫 번째 명령에서 "checkout"은 해당 분기를 현재 분기로 만들고 "-b"는이 분기가 아직 존재하지 않음을 의미합니다.


6

소스 트리를 통해 수행하는 방법

 1: Open SourceTree, click on Repository -> Checkout
 2 :Click on Create New Branch
 3: Select branch where from you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push button)

5

git push -u <remote-name> <branch-name>새로 만든 브랜치가 동일한 리포지토리에서 스폰 git checkout -b new_branch되지 않으면 작동하지 않습니다.

예를 들어, 두 개의 서로 다른 리포지토리를 로컬로 복제했으며 repo2 / branch1을 repo1 /에 복사 한 다음 푸시해야했습니다.

이 링크를 통해 로컬 리포지토리 (다른 리포지토리에서 복제)를 원격 리포지토리로 푸시 할 수있었습니다.


3

Egit을 통해 일식으로 수행하는 방법은 다음과 같습니다.

1) "Git Repository 탐색"보기로 이동하여 분기를 작성하려는 자식 프로젝트를 확장하십시오. Brances-> Local ..에서 브랜치를 생성 할 브랜치를 선택하십시오 (제 경우에는 마스터를 선택했습니다. 원하는 경우 다른 브랜치를 선택할 수 있습니다). 이 프로젝트 체크 아웃 옵션을 선택한 다음 완료 버튼을 클릭하십시오.

2) 이제 프로젝트 탐색기에서 프로젝트를 선택하십시오.. 마우스 오른쪽 단추를 클릭 한 후 팀-> 푸시 분기를 클릭하십시오.

새로운 원격 지점이 생성됩니다. 동료의 지사 이름을 당겨서 가져올 수 있습니다.


Egit 및 모든 JGit 기반 클라이언트 인 AFAIK에 대한 접선 경고 : .gitattributes를 지원하지 않습니다! 즉, 팀에서 Windows (CRLF)와 Linux / OSX (LF)를 함께 사용하는 경우 항상 올바른 설정을 가진 각 클라이언트에 의존해야합니다. 당연히 리포지토리 또는 프로젝트 수준에서 중앙 결말을 관리하는 것이 좋으며 .gitattributes가 지원되는 방법입니다. 따라서 Egit을 절대 사용할 필요가 없다면 ...하지 마십시오! :)
— cweekly

2

지점을 만드는 데 두 가지 방법을 사용했습니다

TortoiseGit을 사용하는 경우 다음 단계를 수행하십시오.

1. TortoiseGit을 사용하여 지점 만들기

프로젝트를 마우스 오른쪽 버튼으로 클릭 >>> TortoiseGit >>> 분기 만들기 >>> 분기 이름을 작성하고 기본 분기를 선택한 다음 확인을 누릅니다.

2. 지점을 누릅니다

프로젝트를 마우스 오른쪽 버튼으로 클릭 >>> TortoiseGit >>> 푸시 >>> 확인을 클릭하십시오.

3. 새 지점으로 전환

프로젝트를 마우스 오른쪽 버튼으로 클릭하고 >>> TortoiseGit >>> 스위치 / 체크 아웃 >>> 새로 생성 된 분기를 선택하고 확인을 누릅니다

명령 프롬프트를 사용하는 경우 다음 단계를 수행하십시오.

1. 명령 프롬프트를 사용하여 분기 만들기

$ git checkout -b new_branch_name

2. 지점을 누릅니다

$ git push origin new_branch_name

3. 새 분기로 전환하면 이미 new_branch_name으로 전환됩니다. 그렇지 않으면 사용할 수 있습니다

$ git checkout new_branch_name


0

나는 이것을 사용하고 꽤 편리하다 :

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

사용법 : git mkdir NEW_BRANCH

자식 상태조차 필요하지 않습니다. 어쩌면 모든 것이 잘 돌아가고 싶을 수도 있습니다 ...

단일 명령으로 LOCAL 및 REMOTE 분기를 모두 가질 수 있습니다.

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