1

この質問はgit rebase interactive: squash merge commits togetherに非常に関連しています。

特定のプロジェクトの新しい機能を作成しているとします。たとえば、特定のブランチから開始し、develフィーチャー用のブランチを構築しますfeature/X。ときどき、プロジェクトでいくつかの問題を見つけることもあるので、あなたはfixesから始まるという名前の 2 番目のブランチを構築することにしましたdevel

修正を随時適用する必要があるため、時々feature/X実行し続けると、次のような状況になります。git merge fixes

      a --- b --- M --- c --- M --- d ---- e --- M (feature)
     /           /           /                  /
    /           /           /                  /
devel ----- fix1 ------ fix2 ------------- fix3 (fixes)

これは決してプッシュされなかったので (他の誰かの履歴を壊すことはありません)、すべてのマージを 1 つに因数分解して、次の結果を得たいと思います。

      a ---------------------- M --- b --- c --- d --- e (feature)
     /                        /
    /                        /
devel -- fix1 -- fix2 -- fix3 (fixes)

この結果を得る方法は、

git co -b feature2 devel
git merge --no-ff fixes
git rebase featur2 feature

これは実際に仕事をしますが、feature2後でマージのコミットメッセージに表示される別のブランチを作成する必要があります。また、2 つ以上のブランチで作業しているときに試してみてください。

これを行うよりエレガントな方法はありますか?便利なコマンドの価値がある操作と思われるので、ショートカットがあると思います。

ご協力いただきありがとうございます

4

2 に答える 2

1

少し違う歴史を生きることができれば、つまり

                               + --- a' --- b' --- c' --- d' --- e' (機能)
                              /
                             /
devel -- fix1 -- fix2 -- fix3 (修正)

その後、単一のコマンドで実行できます。

$ git rebase 修正機能

featureその血統が にすでに存在する場合に、親リンクをマージコミットから保持したいというあなたの歴史について何か特別なことはありますfixesか?

于 2013-10-06T00:05:20.077 に答える