Git のマスター ブランチを完全に空にしたいと考えています。今のところ、マスターから分岐した他のすべてのブランチも保持したいと思います。
これは可能ですか?
これは実際には「古いマスターブランチを削除し、最初から新しいものを作成する」と呼ばれています
これにより、最初のコミットを指す新しいマスターブランチが作成されます。
git branch -D master
git checkout -b master <initial commit hash>
これにより、所有しているものとは関係のないまったく新しいマスターブランチが作成されます。
git branch -D master
git checkout --orphan master
git rm -rf *
しかし実際には、現在のリポジトリを別の場所に保存して、代わりに新しいリポジトリを作成することができます。
まず、現在のマスター ブランチを移動または削除する必要があります。個人的には、削除するよりも、脇に移動することを好みます。その後、--orphan
フラグを使用して、親のない新しいブランチを作成するだけです。例えば:
git branch -m master old_master
git checkout --orphan master
現在のブランチには履歴がないため、一部のコマンドはfatal: bad default revision 'HEAD'
、新しいマスター ブランチで最初のコミットを行うまで、エラーで失敗する場合があります。これは正常であり、新たに初期化されたリポジトリで見られるのと同じ動作です。
他の回答は、新しいマスターブランチを作成することを提案しています(空のリポジトリにあるように)。しかし、履歴のないマスターを持つことは良い習慣ではありません。最初のコミットをリベースできないため、リベースを使用するのが難しくなります。どのリポジトリでも、master の最初のコミットは空にする必要があります。これには、低レベルの配管ソリューションがあります。
まず、空のツリー ハッシュを取得します。
$ git hash-object -t tree /dev/null
4b825dc642cb6eb9a060e54bf8d69288fbee4904
次に、ツリー ハッシュを使用して空のコミットを作成します。
$ git commit-tree -m "inital commit" 4b825dc642cb6eb9a060e54bf8d69288fbee4904
a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22
そして最後に、マスターをそのコミットにリセットします
$ git reset --hard a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22
マスターブランチを最初のコミットにリセットしてから、その最初のコミットをgit checkout master; git reset --hard ${sha-of-first-commit}
修正して、その中のファイルを削除することができます。
これにより、元のマスターブランチが得られ、他のすべてのブランチはそのままになりますが、履歴を書き換えているため、クローンを作成したすべてのリポジトリを修正する必要があります。
ローカル リポジトリのマスター ブランチにチェックアウトして、すべてを削除するのはどうですか。次に、このブランチをリモート ブランチ (オリジン) にプッシュします。
master ブランチまたはブランチ自体のコンテンツを空にしますか?