2009-02-22 26 views
13

私の最初のコミットは、間違いなくそれの中にかなりのメディアファイルで作られているので、スペースの90%を食べているようです。ローカルとリモートのリポジトリから最初のコミットだけを削除する方法はありますか?それともこのままにしておきますか?Gitリポジトリから最初のコミットを削除できますか?

+1

'git rebase --root'もあります。詳細については、以下のSO答えを参照してください。http://stackoverflow.com/questions/2246208/change-first-commit-of-project-with-git – MKroehnert

答えて

20

既に他の多くのユーザーとリポジトリを共有しているようです。これが当てはまる場合は、おそらくそれだけで生活するべきです。

すべてのクローンを管理している場合は、意図しないファイルを削除して、変更されたルートコミットの上に履歴を書き直すことができます。他の開発者がすでにこのブランチから作業している場合は、これを行うべきではないことに注意してください。

履歴を書き換えている場合は、次の方法を試すことができます。 gitはHEADコミットが最近行われたログ(reflogs)のログを保持しているので、git gcまたはgit gc --pruneにしようとしても、大きなオブジェクトはリポジトリや他のリポジトリからすぐに消えません。ただし、新しいクローンがマスターブランチの履歴の一部として大きなオブジェクトをフェッチすることはありません。

作業ディレクトリは、「クリーン」であると仮定すると:(例節を参照してください)別の方法としては、問題のあるファイルを削除するgit filter-branchを使用することができます

# Go back the initial commit 
git checkout <SHA1_of_old_root> 

# Clean up the index to remove unwanted files, e.g. using git rm <files> 
# ... 

# Amend the initial commit with the new tree. Note the sha1 of the new commit 
git commit --amend 

# Go back to the master branch 
git checkout master 

# Re-apply all the commits onto the new root 
git rebase --onto <SHA1_of_new_root> <SHA1_of_old_root> 
2

、それはまた、歴史を書き換えています。だから、あなたの古い歴史の上に自分のコードを置いた人は、悪い驚きを得るでしょう...

+1

filter-branchもより良い対処をします(または少なくとも対話を少なくする必要があります)if不要なファイルに対する変更は、ルートコミット以降に追跡されています。 –