コミットa1、a2、a3、a4のテストブランチがあります。マスターブランチに変更を加えたいのですが、4回ではなく1回のコミットでのみです。だから私はしました:
git checkout master
git merge -Xtheirs test
git rebase -i a1
squash a4
squash a3
squash a2
pick a1
したがって、マスターブランチで、a1、a2、a3、a4からの変更を含むコミットb1を取得しました。これは、初めて実行したときに正常に機能しました。次に、テストブランチを続行し、コミットa5、a6、a7、a8を追加しました。私はマスターにチェックアウトし、再度マージしました-a5はa4の続きであり、したがってb1の続きであるため、奇妙な競合を解決する必要がありました。git diff
a4とb1では違いが出力されなかったことに注意してください。次に、a5からリベースしようとしましたが、さらに多くの競合が発生しました。
だから、それはgit rebase
私が必要としているものではないようです。コミットに参加した後、gitはa4とb1を異なる履歴を持つ異なるコミットオブジェクトと見なし、さらに悪いことに、グラフ内の異なる位置になります。
私は次のようなものが欲しいです:
b0 --- b0 | | a1 | | | a2 | | | a3 | | | a4 ---- b1 | | a5 | | | a6 | | | a7 | | | a8 ---- b2 | | a9 | | | ... --- b3
それも可能ですか?
コミットのすべてのグループにブランチを作成できます。つまり、a1、a2、a3、a4にブランチを作成してから、マスターを使用してマージとリベースを実行し、コミットa5、a6、a7、a8にb1から別のブランチを作成してから、マスターとマージしてリベースし、b2などを取得します。しかし、これは私が望んでいることではありません。1日に1つのブランチを持つことは望ましくありません。すべてのコミットを含むテストブランチと、より大まかな粒度のマスターブランチの2つのブランチのみが必要です。マスターをプッシュしたときに、私が行った小さな変更がすべて表示されないようにします。