2009-05-06 3 views
18

'git push'로 인해 두 가지로 커밋을 시도 할 수 있습니까? 나는 공유하고있는 repo에있는 내가 일하고있는 나의 자신의 가지를 가지고있다. .. 그리고 master branch. 지금 당장 나는 개인 지점으로 밀고 싶었지만 잘 지내기 위해 노력했지만 거부 당했다.git push에서 git이 두 개의 브랜치를 사용하는 이유는 무엇입니까?

foo$ git push 
Counting objects: 38, done. 
Delta compression using 2 threads. 
Compressing objects: 100% (19/19), done. 
Writing objects: 100% (21/21), 9.73 KiB, done. 
Total 21 (delta 14), reused 0 (delta 0) 
To ssh://example.com/project.git 
    8184634..86b621e mybranch -> mybranch 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to 'ssh://example.com/project.git' 

내 설정은 다음과 같습니다 :

remote.origin.url=ssh://example.com/project.git 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
branch.master.remote=origin 
branch.master.merge=refs/heads/master 
branch.mybranch.remote=origin 
branch.mybranch.merge=refs/heads/mybranch 

에스코 그들이 내 설정에있어 있기 때문에 모두 밀어 있다는 지적이 뭔가를 보았다. 두 가지 방법을 동시에 추진하고 싶지 않은 경우 어떻게해야합니까? 나가 나의 기관을 체크 아웃하고 나가 git 밀기를 가지고있을 때, 나는 주인이 아닌 mybranch를 밀기 위하여 명확하게 의미한다. 체크 아웃 마스터, 코드 편집, 커밋/푸시하려는 경우가 있습니다. 공존 할 수있는 방법이 있습니까?

답변

26

아무런 인수없이 git push을 사용하면 동일한 이름의 해당 원격 분기가있는 모든 로컬 분기를 푸시합니다. 로컬 리포지토리가 mastermybranch 브랜치를 가지며 원격 리포지토리가 mastermybranch 브랜치를 가지므로 Git은 두 가지 모두를 푸시합니다. git push origin mybranch

당신이 주인을 밀어하려면 먼저 마스터에서 당겨 그 오류를 해결할 수 있습니다 : 당신이 하나 개의 지점을 밀어하려면

, 당신은 명시 적으로 밀어 원하는 어떤 지점을 힘내을 말할 수있다. 힘내는 빨리 감기가되는 병합에 대해 불평한다. 왜냐하면 다른 누군가가 당신이 주인을 마지막으로 끌어 낸 이후로 누군가가 커밋을 시도했기 때문이다.

+0

도 아닌 내가이에 그냥 둘 모두를 밀어하려는 경우 같은 시간?mybranch 만 밀어 넣기를 원할 때가 있습니다. mybranch를 master로 병합하고 master를 push하려고 할 때가 있습니다. 이 경우에 무엇을합니까? – Coocoo4Cocoa

+0

"git push "형식을 사용하여 푸시하려는 분기의 이름을 항상 명시 적으로 지정할 수 있습니다. http://www.kernel.org/pub/software/scm/git/docs/git-push.html –

+0

최신 버전의 자식을 사용하면이 동작을 지정할 수 있습니다. – Dustin

3

현재 브랜치만을 푸시하려면 "git push origin HEAD"또는 "git push HEAD"(현대 git 사용)를 사용할 수 있습니다.

푸시에 대한 refspec (에 사용자가 정의한 refspec이 푸시에 대한 귀하의 설정에 있지만를 가져 없음) 경우 기본 동작은 일치 심판을 밀어하는 것입니다. git-push(1) 가입일 :

자식 푸시 >

< refspec [...] [> > < refspec < 저장소 ...] ...

특수한 refspec : (또는 + : 빠른 순방향 업데이트를 허용하지 않음) 은 git에게 "matching"브랜치를 푸시하도록 지시합니다 : 이 로컬 측에 존재하는 모든 브랜치에 대해 의 브랜치가 원격 측에 이미 존재하면 원격 측은 업데이트됩니다. 명시 적 refspec가 발견되지 않는 경우는 기본 동작 모드이다 (즉, 의 명령 줄이나 ...

+0

새로운 (er) 자식 (1.6.3.1)과 함께 "git push"를 실행하면 push.default를 설정해야한다는 방대한 경고가 표시되거나 저장소에서 push refspecs를 구성해야합니다. 나는 두 번째 일을하는 방법을 알아낼 수 없다. Google은 도움이되지 않았습니다. (내 저장소에 잠재적 인 push'ers가 큰 지방 경고와 혼동/성가 시게 될 것이기 때문에, 나는 그들에게 "git clone ..."후에 아무 것도 설정하지 않기를 원하기 때문에, 저장소를 구성하고 싶습니다) – asjo

+2

리모컨을 구성 (설정)합니다. .push, 은 아마도 'origin'에 있고, 은 "+ refs/heads/* :"(태그에도 동일) 미러 동기화 푸시 - 투 - 리포 지 토리에 사용할 수 있습니다. –

관련 문제