2016-06-17 4 views
2

나는 branch-x에 있었고 몇 가지 변경 작업을 수행했지만 커밋하지는 않았습니다. 커밋은 정확했지만 branch-x 대신에 branch-y을 사용했습니다. branch-x에서 커밋을 수행하고 branch-y에 어떻게 적용 할 수 있습니까? 커밋 된 변경 사항을 branch-x에서 푸시하지 않으려합니다.한 브랜치에서 다른 브랜치로 커미트 (비 처리)하는 방법

다음은 명령에서 수행 한 작업입니다.

(branch-x)$: git status 
(branch-x)$: git add . 
(branch-x)$: git commit -m "some commit" 
<oops, I should have made these changes in branch-y> 
(branch-x)$: git checkout -b branch-y 
(branch-y)$: <how can I take the commit from branch-x and apply it here?> 
+0

이 예제는 * 기존 * branch-y에서 작업하는 대신 * 새로운 * branch-y를 만드는 방법을 보여줍니다. 그게 네가하려는거야? – torek

+0

네, 그게 의도입니다. – Anthony

답변

3

이미 git checkout -b branch-y을 통해 원하는 지점을 생성하고,이 새로운 지점이 (가) 그런 다음 남아있는 유일한 문제는 별도의 불량이 branch-x의 끝 부분에 투입하고, 원하는 커밋이 있기 때문에. branch-x을 아직 게시하지 않았으므로 기록을 다시 작성하는 것이 안전해야합니다. 다음을 수행하십시오 :

git checkout branch-x # switch back to branch-x 
git reset --hard HEAD~1 # nuke the rogue commit on the tip of this branch 
+0

cherry picking over reset --hard를 권하고 싶습니다. 그것은 더 안전합니다. – Edvin

+0

@ 에드 빈 원래 문제를 오해 한 것 같습니다. 지점'branch-y'에는 이미 그가 원하는 커밋이 있습니다. 그는'branch-x'에서 원하지 않는 커밋을 제거하기 만하면됩니다. 나는 원래'git cherry-pick'을 사용하여 대답했으나 그것을 수정했다. –

+0

오, 오케이. 이 주석은 "어떻게 branch-x에서 커밋을 가져 와서 branch-y에 적용 할 수 있습니까?" 그 때지도 약간 미스이다. – Edvin

1

가능한 해결책은 git cherry-pick입니다. 이와 같이 커밋 그래프가 있다고 가정 해 봅시다.

A-B-C-D-E->branch-x 
M-N->branch-y 

이제 CDE가 브랜치 -y가되도록합니다.

git checkout branch-y 
git cherry-pick C D E 

또는

git cherry-pick C^..E 

우리는

M-N-C'-D'-E'->branch-y 

또 다른 가능한 해결책은 git rebase을 사용하는 것입니다 얻을.

git rebase --onto branch_y C^ E 
git branch -d branch_y 
git checkout -b branch_y 
관련 문제