로컬 Git 브랜치를 다른 이름의 리모콘으로 쉽게 푸시하려면 어떻게해야합니까?


175

항상 두 이름을 모두 지정하지 않고 다른 이름을 가진 원격 지점이있는 로컬 지점을 밀고 당기는 쉬운 방법이 있는지 궁금합니다.

예를 들면 다음과 같습니다.

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

이제 누군가 remote_branch_name을 업데이트하면 다음을 수행 할 수 있습니다.

$ git pull

그리고 모든 것이 병합되고 빨리 전달됩니다. 그러나 로컬 "newb"를 변경하면 다음 작업을 수행 할 수 없습니다.

$ git push

대신, 나는 :

% git push origin newb:remote_branch_name

조금 어리석은 것 같습니다. 경우 git-pull사용이 git-config branch.newb.merge곳에서 끌어 결정하기 위해, 왜 수없는 git-push비슷한 설정 옵션이? 이것에 대한 좋은 지름길이 있습니까? 아니면 먼 길을 계속해야합니까?

답변:


93

확실한. 그냥 설정 push.default하는 upstream(즉 동일하다 자신의 업스트림에 밀어 지점 pull에 의해 정의에서 끌어 branch.newb.merge오히려 (의 기본 설정 인 이름에 일치하는 것들에 지점을 밀어보다,) push.default, matching).

git config push.default upstream

Git 1.7.4.2 이전 에는 호출 tracking하지 않았 upstream으므로 Git의 이전 버전을 사용하는 경우 tracking대신 사용하십시오. 이 push.default옵션은 Git 1.6.4에 추가되었으므로 그보다 오래된 버전 인 경우이 옵션이 전혀 없으며 푸시 할 지점을 명시 적으로 지정해야합니다.


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

내가 체크 아웃 한 지점 이름에 대한 속기가 있는지 알고 싶습니다. 나는 반드시 알 필요가없는 지역 지점 이름 을 git push buildserver .:test_this어디에서 원할 수도 있습니다 .. 나는 그것을 찾을 수 있었다. 그러나 점과 같은 짧은 손이 있었다면, 그것은 시원 할 것이다.
Frederick Nord

2
@FrederickNord HEAD는 당신이 찾고있는 속기입니다. HEAD현재 체크 아웃 된 브랜치를 가리 키거나 헤드가 분리 된 경우 특정 커밋을 직접 가리 킵니다.
Brian Campbell

감사! 이것은 Updates were rejected because a pushed branch tip is behind its remote나를 위해 오류를 수정했습니다 . 내 지역 저장소는 최신 상태이지만 이름은 다릅니다.
canhazbits

171

초기 푸시를 수행 할 때 -u 매개 변수를 추가 하십시오 .

git push -u origin my_branch:remote_branch

후속 푸시는 당신이 원하는 곳으로 갈 것입니다.

편집하다:

의견에 따라 풀만 설정합니다.

git branch --set-upstream

해야합니다.


7
-u질문에 따라 이미 설정된 업스트림을 설정하십시오. 그는 세트에 필요 push.defaultupstrem도착하기 위해 push단지 기본으로하기 때문에, 업스트림 설정을 존중 pull한다.
Brian Campbell

2
적어도 작동하지 않는 git 버전에서는 작동하지 않는 것 같습니다
Thomas Watson

git branch --set-upstream은이 후에 풀 설정 "pushRemote"만 설정하면됩니다.
wheredidthatnamecomefrom

나는 필요하지 않다고 생각 git branch --set-upstream합니다. 참고 : my git --version는 2.17.1입니다.
Gabriel Staples

15

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

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

의 상류 지점 설정 my_local_branch에를 origin/my_remote_branch.


6
더 이상 사용되지 않는 -u에 대해 공유하는 정보를 지원하는 링크를 제공 할 수 있습니까? git-scm.com의 푸시에 관한 최신 버전의 문서는 최신 버전 을 제안하는 것으로 보입니다. 미리 감사드립니다. 자세한 내용은 독자가 후속 조치를 취하는 데 매우 도움이 될 수 있습니다.
Kay V

@KayV에 동의하십시오. 특히 로컬 지사와 다른 이름으로 새 원격 지사를 만들 때이 메시지가 나타납니다. '원격 상대방을 추적하는 새 로컬 지사를 푸시하려는 경우 "git push -u"를 사용하여 푸시 할 때 업스트림 구성을 설정하십시오. '
FBB

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)는 원래 마스터와 동기화되지만 기능 분기는 없습니다.

git rebase upstream/branch-name
git push origin master

Rebase는 스마트 병합입니다. 그런 다음 다시 마스터로 이동하면 선택한 기능 분기가 새 저장소에서 마스터로 표시됩니다.

선택 과목:

git remote rm upstream
git remote add upstream new-repo-url

0

나는 지금 꽤 오랫동안 같은 문제에 부딪쳤다. 나는 마침내 일련의 진술을 가지고 있으므로 git push origin local:remote매번 할 필요가 없습니다 . 나는 이것을 따랐다.

git branch --set-upstream-to origin/remote_branch_name
git config push.default upstream
git push

다른 이름 (첫 번째 줄)으로 원격 지사로 업스트림을 설정 한 다음 해당 업스트림을 기본 (두 번째 줄)으로 설정하면 세 번째 줄은 이러한 규칙을 준수하고 설정된 업스트림으로 푸시됩니다.

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