2009-06-10 11 views
35

ブランチ "master"でコミットしようとしたときに、私が偶然ブランチ "testing"で10コミットを作った。 "testing"ブランチ上の他のコミットはガベージであるので、私は "master"とマージしたくありません。代わりに、私はマスター上の最後の10回のコミットを再生したいだけです。最後のN gitコミットを別のブランチで再生する

答えて

16
  1. Gitチェックアウトマスター
  2. gitが
  3. gitの桜ピック_________

をテストwhatchanged?

+5

fyi-cherry-pickは一度に1つのコミットだけを行いますので、チェリーピケットテスト〜9、テスト〜8テスト...などがあります。だから私は、Talljoeが提案したリベースアプローチを好む理由です...もちろん、結果は同じです。実際に、対話的にrebaseを行うと、gitは実際にチェリーピックをボンネットの下で使用します。 –

+9

@PatNotz 'git cherry-pick'は現在、現在複数のコミットを同時に行うことができます(例えば' git cherry-pick testing〜10..testing')。 –

+0

決して 'cherry-pick'を使うべきではありません。詳細については、[この記事を読む](http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html)を参照してください。 – Tim

80

Rebaseはそれを行う必要があります。

git rebase -p --onto master testing~10 testing 

これはマスターし、新しいテスト(旧試験は孤児になる)ことを確認するためのテストに最後の10回のコミットをコピーします。その後、マスターを早送りとしてテストにマージすることができます。

git checkout master 
git merge testing 
+0

これが転記される前に使用されたRonの答え。 –

+8

これは、masterと同じポイントでテストを残し、 'garbage'コミットが孤立したままになることに気付くでしょう。これは良いことかもしれません。もう一つの可能​​性はgit checkout masterです。 git reset - ハードテスト。 git rebase --onto HEAD @ {1} HEAD〜10 –

+0

@CharlesBaileyあなたはそこにヒットするつもりですか? – Fredrick

2

としてはrebase -inspired答えはを孤立コミット 'ごみ' を残しで、コメントで述べています。

git checkout master 
git merge testing 
git checkout testing 
git reset --hard HEAD~10 # Go back 10 commits (*1) 
git checkout master 

あなたはmergemasterおかげでそれらのコミットをしていますので、(* 1)あなたが唯一、testingブランチからコミットを「失う」ことになります。

は単純なツールを使用しています。

関連する問題