2017-08-09 7 views
0

開発用のブランチを作成しましたが、役に立たないコミットがいくつかあります。ここで、コミットをメインラインブランチにマージしたいと思います。起点/マスターブランチで欲しいコミットは、最新のコミットと2回目の最新コミットに最初のコミットを押しつぶす別のコミットだけです。2つのコミットだけで1つのコミットが潰れた別のブランチにマージする方法はありますか?

編集: 申し訳ありませんが、これは明確でない場合は、私はそれをより明確にしようとしましょう。 devブランチに5つのコミットがあるとしましょう。 devブランチで行われたすべての変更をorigin/masterブランチにマージしたい。問題は、コミット#1-4を1つのコミットに縮小し、そのコミットをマージし、#5を起点/マスターブランチにコミットしたいということです。

答えて

2

、あなたが取り除くために、対話型リベースを行うことができますいずれかo

その後
# check out master and update it first 
git checkout master 
git merge origin/master 

# cherry-pick the latest commit from the development branch 
git cherry-pick dev-branch 

# cherry-pick the other commit (use the hash from the log) 
git cherry-pick theothercommitshash 

、あなたがmasterの上にきれいにこれら二つのコミットを持っていて、ソフトリセットを使用してそれらをつぶすことができます:あなたはしたくない、またはあなたは、単に2は、あなたが実際に残しておきたい桜選ぶことができ、それらのFまたは対話型のリベースです。

問題は、コミット#1-4を1つのコミットに縮小し、そのコミットをマージして#5を起点/マスターブランチにコミットしたいということです。

これは、実際には対話型のリベースの完全な使用例です。

devブランチから起動し、git rebase -i dev~5を実行して、最後の5回のコミットのインタラクティブなリベースプランを使用してエディタを起動します。それは次のようになります。

pick <hash1> Commit 1 
pick <hash2> Commit 2 
pick <hash3> Commit 3 
pick <hash4> Commit 4 
pick <hash5> Commit 5 

変更をsquashにインナー3 pickので、それは次のようになります。

pick <hash1> Commit 1 
squash <hash2> Commit 2 
squash <hash3> Commit 3 
squash <hash4> Commit 4 
pick <hash5> Commit 5 

squash基本的に「コミットが、前にそれをメルドを取る」という意味します。したがって、この場合、コミット1はそのまま選択され、コミット2、3、および4はすべて1つずつ順番に押しつぶされます。したがって、4つのコミットのすべての変更を含む1つのコミットで終わります。

インタラクティブなリベースを開始するには、プランを保存してエディタを終了し、Gitがプロンプトを表示すると、縮んだコミットのコミットメッセージを調整します。最終的には、ブランチ上で2つのコミットだけが終了します。潰れたコミットとコミット5がその上にリベースされます。

最後に、ブランチをマスターにマージするだけで完了です。

+0

masterをチェックアウトして更新した後、最初の4つのコミットを追加できますか?もしそうなら、どうすればいいのか教えていただけますか?申し訳ありませんが、私はgitにかなり新しいです。 – lezzago

+0

@lezzagoアップデートに関する回答が更新されました。 – poke

0

あなたがマスターに一時的なブランチの全ての変更をマージしない場合、あなたはgit cherry-pickを採用してもよい:

git checkout master 
# Create a new commit in branch master which is equal to the latest 
# commit in my_dev_branch 
git cherry-pick my_dev_branch 

あなたにmy_dev_branchから2つのコミットをチェリー選びたいと単一にそれらを押しつぶす場合はコミットmasterで、その後、--no-commitは何が必要です:その枝のコミット、あなたはを取り除きたい特に「役に立たない」ものの数に応じて

git checkout master 
git cherry-pick --no-commit <some-commit> 
git cherry-pick --no-commit <another-commit> 
# Now that all changes are in index, create a new commit 
git commit 
関連する問題