[解決済み】git リポジトリから古い履歴を削除する方法は?
質問
このシナリオに似たものは見つかりませんでした。
私は多くの履歴を持つgitリポジトリを持っています。500以上のブランチ、500以上のタグがあり、2007年半ばまで遡ることができます。このリポジトリには、~19,500 のコミットが含まれています。2010年1月1日以前の履歴をすべて削除して、より小さく扱いやすくしたいと考えています(履歴の完全なコピーはアーカイブリポジトリに保管しておきます)。
新しいリポジトリのルートにしたいコミットはわかっています。しかし、そのコミットから始まるようにレポを切り詰めるための正しいgit mojoがわかりません。私は、以下のようなものを推測しています。
git filter-branch
また、残しておきたい200以上のブランチをそれぞれ別々に処理し、パッチでレポを元に戻す必要があるかもしれません(何かというと する の方法を知っています)。
どなたかこのようなことをされたことがある方はいらっしゃいますか?もしそれが重要なら、私はgit 1.7.2.3を持っています。
解決方法は?
を作成することができます。
グラフト
の親がない場合 (あるいは空のコミット、たとえばリポジトリの本当のルートコミット) に、新しいルートコミットの親を追加します。例
echo "<NEW-ROOT-SHA1>" > .git/info/grafts
グラフトを作成したら、すぐに反映されます。
git log
で、不要な古いコミットがなくなっていることがわかります。
$ echo 4a46bc886318679d8b15e05aea40b83ff6c3bd47 > .git/info/grafts
$ git log --decorate | tail --lines=11
commit cb3da2d4d8c3378919844b29e815bfd5fdc0210c
Author: Your Name <[email protected]>
Date: Fri May 24 14:04:10 2013 +0200
Another message
commit 4a46bc886318679d8b15e05aea40b83ff6c3bd47 (grafted)
Author: Your Name <[email protected]>
Date: Thu May 23 22:27:48 2013 +0200
Some message
意図したとおりに表示されていれば
git filter-branch -- --all
で永続化します。
ご注意ください。 を実行した後 フィルタブランチ ステップでは、すべてのコミット ID が変更されているので、古いレポを使用している人は、新しいレポを使用している人と絶対にマージしてはいけません。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】git rev-parseは何をするのですか?
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
[解決済み】Git Extensions。Win32 エラー 487: cygwinのヒープ用に領域を確保できなかった、Win32エラー0
-
[解決済み】ローカルGitブランチとそのリモートブランチを比較する方法
-
[解決済み] GitHubに空のブランチを作成する
-
[解決済み] 短いGitバージョンのハッシュを取得する
-
[解決済み] SourceTree error:1407742E:SSLルーチン:SSL23_GET_SERVER_HELLO:tlsv1警告プロトコルバージョン
-
[解決済み】GitのリモートURLを変更すると、リモート拒否される(浅い更新は許可されない)。
-
[解決済み] filter-branch --tree-filter の後に refs/original/heads/master を git repo から削除しますか?
-
[解決済み] git origin と local のタグをすべて削除するには?