2016-06-17 11 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リセット--hardをお勧めします。それはより安全です。 – Edvin

+0

@エドウビン私は元の問題を誤解していると思います。ブランチ 'branch-y'にはすでに彼が望むコミットがあります。彼は 'branch-x'から不要なコミットを削除するだけです。私はもともと 'git cherry-pick'を使って答えましたが、それを改訂しました。 –

+0

ああ、ああ。このコメントは、 "ブランチ-xからのコミットをどのようにしてブランチ-yに適用できますか?"その後、少し先を行く。 – Edvin

1

可能な解決策の1つはgit cherry-pickです。このようなコミット・グラフがあるとします。

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

ここで、CDEをbranch-yにします。

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

または

git cherry-pick C^..E 

と、私たちは別の可能な解決策は、git rebaseを使用することです

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

を取得します。

git rebase --onto branch_y C^ E 
git branch -d branch_y 
git checkout -b branch_y 
関連する問題