2013-03-05 25 views
16

masterにチェックを入れておいたほうがよいでしょうか。developにチェックしてください。これらのコミットをmasterブランチから削除するためにgitコマンドを使用し、developブランチにインクルードする方法はありますか?gitコミットをmasterから別の既存のブランチに移動する方法

+1

あなたはこの回答を見ましたか? - http://stackoverflow.com/questions/1773731/in-git-how-do-i-remove-a-commit-from-one-branch-and-apply-it-to-a-different-bra?rq =この時1人の –

+0

見て:[移動-最近のコミット-に-新しいブランチ] [1] [1]:http://stackoverflow.com/questions/1628563/move-recent新しいブランチをコミットする –

+0

「この質問には既に回答があるかもしれません」というブロックが上部にあるので、私の質問は_new_ブランチに移動することではなく、異なる_existing_ブランチ – gitq

答えて

5

あなたはdevelopの上にコミットをcherry-pickすることができ、その後、対話的rebaseあなたmasterブランチ:

  1. git checkout develop
  2. git cherry-pick aabbcc
  3. git cherry-pick ddeeff
  4. ....
  5. git checkout master
  6. あなたがミスを犯した前 123456がコミットされた
  7. git rebase 123456 -i

。これは、rebaseの影響を受けるすべてのコミットを表示するエディタを開きます。エディタを破棄して終了するコミットに対応する行を削除します。あなたはチェリー・ピッキングを使用することができ、別のブランチに対処するための

6

git cherry-pick <commit> 

の削除はそんなに簡単ではありません。あなたは、リベースやスカッシュを使用するか、編集コミットすることができます

git rebase -i <commit>~1 

しかしリベース中に編集を択一するときに、ファイルもなく、コミットメッセージだけを編集できるかどうかはわかりません。

+1

対話型リベース時に 'edit'を実行すると、コミットメッセージとファイルを編集できます。' reword'はコミットメッセージのみを変更することができます。 –

0

gitの1つの可能な方法を同じことを行うには、いくつかの方法が通常あります

git checkout develop 
git cherry-pick XXX // XXX being the sha1 of the commit you want to grab 
git checkout master 
git rebase --interactive HEAD~IDX // IDX being the position of the last "good" commit compared to HEAD 

最後のコマンドは、最後のコミット良いにHEADからすべてのレビューが表示され、あなたがしなければならないすべてが削除されます私は間違っていない場合は、次の2本の同期の枝、 masterdevを持っていて、単にあなたのコミットの前に支店、 を切り替えるのを忘れ

25

を開発分岐に移動することを約束のライン。

その場合は、我々が持っている:

---------------- 
git log in dev 

xxx 
yyy 
... 
---------------- 

と:

---------------- 
git log in master 

ccc 
bbb 
aaa 
     <---- here you forgot to switch branch 
xxx 
yyy 
... 
---------------- 

をソリューションは、次のとおりです。

まず、確認して、その:

git status -s 

は空の結果を返します。

次に、とdevmasterからすべてのあなたの新しいコミットを取得:

git checkout dev 
git merge master 

masterに戻る:

git checkout master 

不要なコミットを削除します。

git reset --hard HEAD~3 

数を~3はあなたのコミットの数です削除したい

覚えていること:git status -sは空の結果を返す必要があります。 それ以外の場合、git reset --hardはデータの損失を引き起こす可能性があります。

関連する問題