2

関連する投稿で見たコマンドを使用してgit filter-branch、古いコミットのバッチの名前を変更してみました。その結果、私のリポジトリには、異なる作成者との同一のコミットが多数あります。それは私に次のシナリオを残しました:

A' -> B' -> C'
               \
A  -> B  -> C -> D -> E -> F

A'コミットの作成者をA除いてと同じであり、とについても同じB'ですC'。、、、およびのすべての参照と履歴A'を削除したいと思います。注:これらのコミットはいずれもブランチ上になく、タグもありません。B'C'

重複するコミット履歴を削除するにはどうすればよいですか?これは私が求めている結果です:

A  -> B  -> C -> D -> E -> F

私の理由は、単に履歴をクリーンアップするためです。このコードに触れるのは私だけです。これは、重要なレポを試すのは良いことではないことを私は知っています。また、似たような質問がたくさんあるようですが、うまくいく解決策をまとめることができないようです。

ありがとう!

4

1 に答える 1

1

編集:まあ、これはほとんどうまくいきました。これからわか​​る唯一の問題は、最新のコミット(D +)の送信時間を上書きしたことです。


解決策を見つけたようです。私は一日中その周りで踊っていましたが、最終的に参照する正しいコミットを見つけました。上記の例では、最新のマスターブランチを使用して新しいリポジトリのクローンを作成しました。そこからC、最後の既知の良好な状態を表すコミットのハッシュを見つけました。次に、インタラクティブモードでリベースを実行します。

git rebase -i <the C commits' hash>

表示されるエディターには、削除したい重複コミットのみが表示されました(現在の履歴まで)。そこで、Dコミットまでの古い重複エントリをすべて削除しました。リベースコマンドを保存した後、エラーなしで完了しました。

この時点で、私のローカルリポジトリにはすべてが整っているように見えたので、サーバーに強制的に追加しました。

git push --force origin master

最終結果はまさに私が探していたもののようです:

A  -> B  -> C -> D -> E -> F

それが最善の方法かどうかはわかりませんが、これも実際にはやりたいことではありません。

于 2013-02-21T20:42:38.647 に答える