2016-04-05 6 views
3

私はgitにかなり新しく、自分でしか動かないので、私はそれができる機能をたくさん使いませんが、私が考えているプロセス間違ったことや何か間違ったことをする。git merge --squashを正しく使うには

私は1つのコミット(init)を持つマスターブランチを持っています。

私は180のコミットを持つ開発ブランチを持っています。

今日私は最終的に開発ブランチをマスターにマージする準備が整いました。私はいくつかの読書を行い、スカッシュについて知りました。開発ブランチにある同じWIPコミットでマスターブランチを汚染しないので、これは役に立つもののようです。

だから私はすべてここから

git checkout master 
git merge --squash develop 
git commit 

を走ったがmasterdevelopはまだ私が今、再びdevelopをチェックアウトして、作業を続け、私の頭には180を持っている2つのコミットを、持っている、私は予想通りに見えます。私はbitbucketに押され、このマージを見るために私のプロジェクトで、周りを見ていたし、次のように気づい:

1 commit(s) on master and not on develop 
179 commit(s) on develop and not on master 

はこのちょうど期待される動作であり、私はそれを無視することになっていたり、私が何か間違ったことをしました。

答えて

2

これは、gitがすべてのコミットを1つのコミットにマージするので、これは期待しています。これは、開発ブランチのコミットとは異なるコミットです。別のコンテンツを変更する場合は、コミットを一連の変更のコンテナと見なしてください。

このシナリオを受け入れるか、フィーチャーブランチで作業することでワークフローを調整できます。マスター - 開発 - フィーチャーブランチ。

フィーチャーが完了したら、フィーチャーブランチからスカッシュマージを行い、フィーチャーブランチを開発および削除します。 WIPコミットがすべてなくても、開発からマスターにマージを行うことができます。あなたが新しいリリースなどを作るとき。

+0

は理にかなっています。私はそれを受け入れなければならないと思う。フィーチャーブランチは理にかなっていますが、私はマスターに持ち込む前にいくつかの機能を統合することになるでしょう。同じボートに終わり、ちょっとしたレベルになります。 – mgabe

0

Gitでコミットすると、1つのコミットに結合されます。ただし、複数のコミットの変更を新しいコミットに結合する場合は、マージします。

あなたの場合、私があなたがやったと信じているのは、「早送り」しないでマージしたことです。この種のマージでは、最終的にマスター(初期とマージ)で2回コミットし、devで180回コミットします。

コードは(最後のdev内のコミット後に)次のようになります。

git checkout master 
git merge dev --no-ff 
+0

これは私が欲しいもののように聞こえるが、私はそれを試してみると、両方で180のコミットで終わる。 – mgabe

+0

これは、マージが早送りされている場合に起こります。 no-fastforwardでは、180のコミットはdevに残っていますが、マスターではすべての変更が押しつぶされて1つのコミットがあります。正確なコードを試しましたか? – josemigallas

+0

はい、正確なコードは私が181のコミットをマスターに、180のコミットを開発してくれました。 'git rev-list --count HEAD'によって検証されました – mgabe