2012-12-16 8 views
177

한 브랜치에서 다른 브랜치로 변경 사항을 커밋하고 푸시 할 수 있습니까? 다른 브랜치로 커밋하기

내가 BRANCH1에 변경 내용을 커밋 가정 및 브랜치로 밀어합니다.

git push origin **BRANCH2** 

을 그리고 BRANCH1를 재설정 : BRANCH1에서

, 그것은 할 유효합니까? 이 브랜치의 빨리 감기가의 경우에만 작동합니다 또는 당신이 그것을 강제하는 경우하지만 확실히

답변

342

거의 작동합니다.

기본이 아닌 지점에 밀어, 소스 심판 대상 REF 지정해야합니다 : 내 경우

git push origin branch1:branch2 

또는

git push <remote> <branch with new changes>:<branch you are pushing to> 
+11

'branch1'과'branch2' 둘 다 리모트에 있어야합니까? 만약 당신이 로컬'branch1'에서 원격'origin branch2'로 푸시하고 싶다면? – orad

+5

@orad : 아니요. 첫 번째 부분은 실제로 로컬 커밋의 식별자입니다. 그것은 심지어 지사 일 필요가 없습니다. – SLaks

+2

먼저 원격 브랜치를 체크 아웃하지 않고 원격 브랜치를 다른 브랜치로 푸시하려면 어떻게해야합니까? – abhisekp

47

. 그런 일을 할 수있는 올바른 구문은

git push <remote> <source branch>:<dest branch> 

가 어떻게 작동하는지에 대한 자세한 사항에 대한 git push man page에 "refspec"의 설명을 참조한다. 강제 푸시와 재설정은 모두 "기록을 다시 쓰는"작업이므로 원격 저장소 및 기타 다른 저장소와 관련하여 수행중인 작업을 절대적으로 확신하지 않는 한 희미한 마음으로 시도해서는 안됩니다. 같은 프로젝트의 포크/클론을 가진 사람들.

+2

감사합니다 : 당신은 단지를 통해 체리 픽, 에 인수를위한 commitish이 필요합니다! 나는'git push -force 원격 로컬 브랜치 : 원격 브랜치 (remote branch) '로 강제 할 수 있다고 덧붙일 것이다. –

0

내가 하나가 지역 커밋했다을하는 origin\master으로 푸시되지 않았지만 내 로컬 master 지점에 커밋되었습니다. 이 로컬 커밋은 이제 다른 분기로 푸시되어야합니다. 당신이 이런 식으로 뭔가를 할 수망할 놈의 확장으로

:

  • 당신이 당신의 커밋 추진하려는 새로운 지점을, 체크 아웃 (기존 아니라이 경우 작성).
  • 내역에서 커밋을 선택하십시오.이 커밋은 &이이 분기에 푸시됩니다.
  • 마우스 오른쪽 버튼으로 클릭하고 체리 커밋 선택을 선택합니다.
  • 를 눌러 체리 나중에 버튼을 선택합니다.
  • 선택한 커밋 get이 체크 아웃 된 분기에 적용됩니다. 이제 커밋하고 밀어주세요.
  • 잘못 된 커밋으로 이전 분기를 확인하십시오.
  • 이 분기를 두 번째 마지막 커밋으로 하드 리셋합니다. 여기서 모든 것이 정상입니다 (여기서 무엇을하는지 알고 있어야합니다). 두 번째 최종 커밋을 마우스 오른쪽 버튼으로 클릭하고 을 선택하면 현재 분기가으로 재설정됩니다. 자신이하는 일이 무엇인지 안다면 그 결정을 확정하십시오.

GIT 명령 줄에서 수행 할 수도 있습니다.예 David Christensen 기술 :

난 당신이 git cherry-pick + git reset 훨씬 빠른 워크 플로우로 찾을 수 있습니다 생각 : "기능"으로 분기되는으로, 당신 같은 시나리오를 사용하여

최상위 잘못되는 커밋은이 작업을 수행하는 것이 훨씬 쉬울 것 :

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

작업의 꽤 저장 및 git cherry-pick 가 처리 할 수 ​​있도록 설계 한 시나리오입니다.

커밋되지 않은 경우에도 잘 작동합니다. 커밋;

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history

관련 문제