2011-04-21 3 views
148

두 가지 이름을 항상 지정하지 않고도 다른 이름으로 원격 분기를 사용하여 로컬 분기를 푸시하고 끌어 오는 쉬운 방법이 있는지 궁금해했습니다. 예를 들어다른 이름의 리모컨으로 로컬 Git 브랜치를 쉽게 푸시 (push) 할 수 있습니까?

: 누군가가 remote_branch_name 업데이트하면

$ git clone myrepo.git 
$ git checkout -b newb 
$ ... 
$ git commit -m "Some change" 
$ git push origin newb:remote_branch_name 

이 지금 내가 할 수있는 :

$ git pull 

그리고 모든 것이/합병 빠르게 전달됩니다. 내 로컬 "newb"을 변경할 경우, 나는 할 수 없습니다 :

% git push origin newb:remote_branch_name 

좀 바보 같다 :

$ git push 

대신, 내가해야한다. git-pull에서 git-config branch.newb.merge을 사용하여 어디에서 가져올 것인지 결정하면 git-push의 구성 옵션이 유사하지 않은 이유는 무엇입니까? 이것에 대한 멋진 지름길이 있습니까, 아니면 그냥 먼 길을 계속해야합니까?

+5

'자식 푸시 출신 지역 이름이 cmd를 나를 위해 일한 원격 name'. –

답변

83

확실히. push.defaultupstream으로 설정하여 분기에 이름 (push.default, matching의 기본 설정)으로 분기를 푸시하는 대신 해당 업스트림 (pull이 풀려 오는 것과 동일 함, branch.newb.merge으로 정의 됨)으로 푸시 할 수 있습니다. 당신이 망할 놈의 이전 버전을 사용하는 경우, 그래서이 사용했던

git config push.default upstream 

참고가되지 upstream 힘내 1.7.4.2 이전 tracking를 호출하는 대신 tracking를 사용합니다. push.default 옵션이 Git 1.6.4에 추가되었으므로, 이전 버전을 사용 중이라면이 옵션을 전혀 가지지 않으므로 푸시 할 분기를 명시 적으로 지정해야합니다. 초기 푸시 the -u parameter를 추가 할 때

+0

그게 전부 였어! 이것은 추적중인 모든 지점에 적용되지만 괜찮습니다. 감사! – jmacdonagh

+0

내가 체크 아웃 한 지점 이름에 대한 속기가 있는지 여부에 대해 알고 싶습니다. 나는 단지'git push buildserver. : test_this'를 원할 수도 있습니다.'.'는 필자가 반드시 알 필요가없는 로컬 브랜치 이름입니다. 나는 그것을 볼 수 있었다. 그러나 짧은 손이 있다면, 점처럼, 그것은 멋질 것이다. –

+1

@FrederickNord'HEAD'는 당신이 찾고있는 속기입니다. 'HEAD'는 현재 체크 아웃 된 브랜치를 가리키고, 분리 된 헤드가 있다면 특정 커밋을 직접 가리킨다. –

145

: 당신이 원하는 곳

git push -u origin my_branch:remote_branch 

후속 밀어 갈 것입니다.

편집 :

은 주석으로 당

것을에만 풀을 설정합니다.

git branch --set-upstream 

해야합니다.

+4

'-u'는 질문에 따라 이미 설정되어있는 업스트림을 설정합니다. 'push.default'를'upstrem'으로 설정해야 업스트림 설정을 존중하도록'push '를 얻습니다. 왜냐하면 기본적으로'pull'만이 있기 때문입니다. –

+1

이것이 작동하지 않는 것 같습니다. 최소한 git 버전이 아니어야합니다. –

11

Adam의 명령은 이제 더 이상 사용되지 않습니다. 당신은 사용할 수 있습니다

git branch --set-upstream-to origin/my_remote_branch my_local_branch 

origin/my_remote_branchmy_local_branch의 상류 지점을 설정할 수 있습니다.

+4

-u에 대해 공유하는 정보를 지원하는 링크를 제공 할 수 있습니까? [git-scm.com] (https://git-scm.com/docs/git-push)에서 푸시와 관련된 최신 버전의 문서는 최신 버전을 제안하는 것 같습니다. 미리 감사드립니다. 독자가 자세한 정보를 얻으려는 경우 매우 도움이 될 수 있습니다. –

0

다음은 저에게 효과가있는 과정입니다.

git clone original-repo-url 
git remote rename origin upstream 
git remote add origin new-repo-url 

이제 새로운 저장소가 '원본'이되고 원래 저장소는 '업스트림'입니다. git remote -v를 실행하여 확인하십시오.(사이드 노트 : 업스트림은 원래의 레포에서 가져 오기 위해 - 당신이 기여하고 싶은 프로젝트와 당신의 로컬 카피를 동기화시키기 위해 사용됩니다 - 원점은 자신의 레포에 기여할 수 있기 때문에 당기고 밀기 위해 사용됩니다).

git push origin master

지금 (Github에서의) 새로운 원격의 repo의 마스터에 동기화 원본 마스터에있을 것입니다,하지만 기능 가지 중 하나를 필요가 없습니다.

git rebase upstream/branch-name 
git push origin master 

Rebase는 스마트 병합입니다. 그런 다음 다시 마스터로 이동하면 선택한 기능 지점이 새 저장소의 마스터로 표시됩니다. 옵션

:

git remote rm upstream 
git remote add upstream new-repo-url 
관련 문제