私が最初に VC を始めたとき、私は SVN を使用していましたが、自分が何をしているのか理解していませんでした。1 つのプロジェクトのさまざまな部分を別々のトランクで維持していましたが、一度にすべてのトランクにコミットするため、同一のコミット メッセージで複数のコミットが発生しました。約 2 年前、私は目を覚まし、すべてのトランクを 1 つのトランクにつぶしてから、さらに目を覚まし、レポを git に変換しました。今では、一握りのブランチを備えた高速で柔軟なレポがあり、これ以上ないほど幸せです...
...古い重複したコミットメッセージのすべてが私を悩ませていることを除いて。(私のレポのコミットの約 1/3 から 1/2 を占めています。) これがまさにgit rebase
目的ですよね? master
重複の 1 つのバッチでテストを実行しようとしましたが、私のブランチが残りのすべてのブランチから分離されているように見えたことを除いて、うまくいきました。私はそれを行いgit rebase -i <sha>
、すべての重複コミットを最初のコミットに押しつぶしました。ブランチ構造をそのまま維持したいと思います。
押しつぶしたい重複メッセージはすべて、変換を行う前に送信されsvn=>git
、すべてのブランチはその変換後に開始されました。つまり、svn=>git
変換前の履歴全体は分岐のない線形です。
もう 1 つの警告 (これは大きな問題です) は、このリポジトリがリモート リポジトリにプッシュされていることです。共有リポジトリの履歴を書き換えるのは悪いニュースであることは知っていますが、リモートからのクローンやフォークをまだ誰も行っていないため、それを検討しているだけです。クローン/フォークに使用できるようにする前に、履歴をクリーンアップしたいと思います。
では、履歴をある時点まで書き換えて、残りをそのままにしておく方法はありますか? この混乱を一掃するのに役立つ他の提案はありますか?