58

Git のマスター ブランチを完全に空にしたいと考えています。今のところ、マスターから分岐した他のすべてのブランチも保持したいと思います。

これは可能ですか?

4

6 に答える 6

70

これは実際には「古いマスターブランチを削除し、最初から新しいものを作成する」と呼ばれています

これにより、最初のコミットを指す新しいマスターブランチが作成されます。

git branch -D master
git checkout -b master <initial commit hash>

これにより、所有しているものとは関係のないまったく新しいマスターブランチが作成されます。

git branch -D master
git checkout --orphan master
git rm -rf *

しかし実際には、現在のリポジトリを別の場所に保存して、代わりに新しいリポジトリを作成することができます。

于 2013-03-16T20:58:11.010 に答える
46

孤立したブランチを作成する

まず、現在のマスター ブランチを移動または削除する必要があります。個人的には、削除するよりも、脇に移動することを好みます。その後、--orphanフラグを使用して、親のない新しいブランチを作成するだけです。例えば:

git branch -m master old_master
git checkout --orphan master

現在のブランチには履歴がないため、一部のコマンドはfatal: bad default revision 'HEAD'、新しいマスター ブランチで最初のコミットを行うまで、エラーで失敗する場合があります。これは正常であり、新たに初期化されたリポジトリで見られるのと同じ動作です。

于 2013-03-16T21:18:41.680 に答える
8

他の回答は、新しいマスターブランチを作成することを提案しています(空のリポジトリにあるように)。しかし、履歴のないマスターを持つことは良い習慣ではありません。最初のコミットをリベースできないため、リベースを使用するのが難しくなります。どのリポジトリでも、master の最初のコミットは空にする必要があります。これには、低レベルの配管ソリューションがあります。

低レベルの配管コマンドを使用して修正する

まず、空のツリー ハッシュを取得します。

$ git hash-object -t tree /dev/null
4b825dc642cb6eb9a060e54bf8d69288fbee4904

次に、ツリー ハッシュを使用して空のコミットを作成します。

$ git commit-tree -m "inital commit" 4b825dc642cb6eb9a060e54bf8d69288fbee4904
a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22

そして最後に、マスターをそのコミットにリセットします

$ git reset --hard a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22

これについては、私のブログ投稿で詳しく説明しています

于 2019-06-30T12:07:30.677 に答える
3

マスターブランチを最初のコミットにリセットしてから、その最初のコミットをgit checkout master; git reset --hard ${sha-of-first-commit}修正して、その中のファイルを削除することができます。

これにより、元のマスターブランチが得られ、他のすべてのブランチはそのままになりますが、履歴を書き換えているため、クローンを作成したすべてのリポジトリを修正する必要があります。

于 2013-03-16T21:01:53.340 に答える
1

ローカル リポジトリのマスター ブランチにチェックアウトして、すべてを削除するのはどうですか。次に、このブランチをリモート ブランチ (オリジン) にプッシュします。

master ブランチまたはブランチ自体のコンテンツを空にしますか?

于 2013-03-16T20:52:50.263 に答える