それで、私はマスターのブランチを持っています。これを foo と呼びましょう。これをしばらく使用しており、約 50 回のコミットの後、foo には独自のサブブランチがいくつかあったため、かなり複雑なマージ履歴を取得していました。ここでは履歴は重要ではなかったので、各ブランチをリベースし、すべてのコミットを 1 つにまとめてクリーンアップすることにしました。これにより、master とそのブランチの違いを表すコミットが 1 つだけになります。
最初は、次のことができると思いました。
git checkout foo
git rebase master
しかし、これはうまくいきませんでした。ブランチには 50 を超えるコミットがあり、それぞれが多くのファイルにアクセスしており、各コミットで多数の競合が発生していました。
代わりに、私がやったことはこれでした:
git checkout foo
<copy all files to another folder>
git checkout master
git branch -D foo
git checkout -b foo
<overwrite all files with the copy I made earlier, and create a new commit>
これは、途中ですべての競合に対処することなく、マージの長い歴史を単一の押しつぶされたリベースに変えるという私のニーズに応えましたが、これを行うためのより「gitフレンドリーな」方法があったかどうか疑問に思っています?