新しい(そして空の!)「ルート」ブランチを作成するにはどうすればいいですか? 質問する

新しい(そして空の!)「ルート」ブランチを作成するにはどうすればいいですか? 質問する

この Git リポジトリに新しい「ルート」ブランチを定義したいと思います。「ルート」ブランチとは、リポジトリ1内の他のすべてのブランチから完全に独立したブランチを意味します。

A残念ながら、リポジトリのコミット ツリーの一番下にあるコミット ( と呼びます) にも多くのファイルが含まれています (これは、すでにかなり成熟したプロジェクトで初期化されたリポジトリでした)。

Aつまり、新しいブランチの として を指定しても<start-point>、この新しいブランチは「白紙の状態」から開始されるのではなく、 でコミットされたすべてのファイルが含まれることになりますA

<start-point>このリポジトリに、できるだけそれに近い、完全に空のブランチを作成する方法はありますかA?


1ちなみにこれはない新しいリポジトリを作成するのと同じです。別々のリポジトリは、多くの理由からあまり便利ではありません。


編集: OK、これが私がやったことです。ジョンズ' 答え:

# save rev of the current earliest commit
OLDBASE=$(git rev-list --max-parents=0 HEAD)

# create a new orphan branch and switch to it
git checkout --orphan newbranch
# make sure it's empty
git rm -rf .

# create a new empty commit in the new branch, and
# save its rev in NEWBASE
git commit --allow-empty -m 'base commit (empty)'
NEWBASE=$(git rev-list HEAD)

# specify $NEWBASE as the new parent for $OLDBASE, and
# run filter-branch on the original branch
echo "$OLDBASE $NEWBASE" > .git/info/grafts
git checkout master
git filter-branch

# NOTE: this assumes that the original repo had only one
# branch; if not, a git-filter-branch -f <branch> command
# need to be run for each additional branch.

rm .git/info/grafts

この手順は少し複雑ですが、最終結果は空のベースコミットは、新しい「クリーンスレートブランチ」の として機能します<start-point>。その後に必要なのは、

git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)

今後は常に次のような新しいリポジトリを作成します。

git init
git commit --allow-empty -m 'base commit (empty)'

...最初のコミットは空の、いつでも新しい独立したブランチを開始できます。(これはめったに必要にならない機能だとは思いますが、すぐに利用できるようにするのは非常に簡単です。)

ベストアンサー1

--orphanブランチを作成するときにを使用します。

git checkout --orphan YourBranchName

これにより、コミットがゼロの新しいブランチが作成されますが、すべてのファイルがステージングされます。その時点で、それらを削除できます。
(「それらを削除する」: A はgit reset --hardインデックスを空にし、空の作業ツリーを残します)

見てみましょうマニュアルページ--orphan の詳細についてはチェックアウトしてください。

おすすめ記事