원격 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.