最後の3つのコミット履歴だけで孤立したブランチを作成したいですか?最後の3つのコミットでgit orphanブランチを作成するには?
MASTER -> A - B - C - D - E - F
NEW ORPHAN -> D - E -F
これは、新しいオーファンブランチを保持し、既存のブランチを削除して、より少ないディスク容量を使用したいと考えています。
最後の3つのコミット履歴だけで孤立したブランチを作成したいですか?最後の3つのコミットでgit orphanブランチを作成するには?
MASTER -> A - B - C - D - E - F
NEW ORPHAN -> D - E -F
これは、新しいオーファンブランチを保持し、既存のブランチを削除して、より少ないディスク容量を使用したいと考えています。
真実は、おそらくあなたが提示する問題の解決策ではありません。それは大きなファイルを扱う際には大したことではなく、削除されたコミットから実際にディスクスペースを解放することは難しいです(は保持履歴ではです)。したがって、最も有用な答えは、そうではありません。
さらに、技術的に完全な回答を提供します。
古いコミットを破棄する予定の場合は、孤立したブランチを使用する必要はありません。あなたは持っているブランチをリベースすることができます。最も簡単な方法は、対話型のリベースです。
git rebase -i
コミットごとに、TODOリストが表示されます。 B
、C
、およびD
のエントリを探し、それらのエントリの最初の単語(コマンド)をpick
からsquash
に変更します。
あなたは、そのコンテンツ(TREE
)ABCD
の、E'
、及びF'
それぞれオリジナルD
からのもの、E
、及びF
と一致
A -- B -- C -- D -- E -- F
ABCD -- E' -- F' <--(master)
で残されます。これは、孤立したブランチを使用して作業するのと同じ状態です。
特に、参照によって到達できない場合でも、オリジナルはA
からF
までのコミットが存在することに注意してください。十分な時間が与えられれば、彼らは再生されるだろう。まず、reflogをロールオフする必要があります(または、reflogを破壊する必要があります)。その後、git gc
を実行する必要があります。
リバース後に新しいクローンを作成することが簡単です。
もちろん、インタラクティブなリベースはスクリプトにとって最も簡単なものではありませんので、反復可能なプロシージャが必要な場合は、少し違うことをしなければならないかもしれません。あなたはまだ古いコミットは、スペースを消費し続けてデータベースにぶらぶらしている問題を抱えている
# get the work tree for a new root
git checkout master~2
# break from history
git checkout --orphan new_master
# start the new branch
git commit -C master~2
git rebase --onto new_master master~2 master
git branch -d new_master
ようなスクリプトに何かを書くことができます。
「浅い枝」を使用することもできます。私が知る限り、浅いブランチはクローンによってのみ作成されますが、データベースから古いオブジェクトをパージする面ではプラス側に作成されます。これにより、コミットメタデータ(およびコミットID)も保持されます。
git clone --depth=3 --no-single-branch file://localhost/path/to/old/repo new-repo
はdepth
オプションは、レポに初期深さを設定しますのでご注意ください。レポを定期的に「浅く」しなければなりません。
目的はディスクスペースを確保していますか?_あなたはその歴史の中で何を持っていますか(誤ってUbuntuのISOなど)?また、 'git gc'を試してみましたか? – msanford
いいえ、大きなファイルをgitリポジトリにバックアップする作業を自動化したいと思います。古いものを削除している間に最新のバックアップを取ることができるようにします –
最後の3つのコミットだけがある場合は、最初の3つの情報が失われ、後で変更されません。あるいは、新しい 'D'は' A..C'を組み込むべきですか? – Useless