1. ホーム
  2. git

[解決済み] 新しい(そして空の!)「ルート」ブランチを作成する方法は?

2022-04-25 07:33:32

質問

このgitリポジトリに新しい"root"ブランチを定義したいのですが、どうすればいいですか? ルートブランチとは、リポジトリ内の他のブランチから完全に独立したブランチを意味します。 1 .

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

つまり、たとえ A を新しいブランチの <start-point> でコミットされたすべてのファイルを含むことになります。 A .

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


1 ちなみに、これは ではなく は、新しいレポを作成することと同じです。 レポを分けると、いろいろと不便になります。


EDIT : OK、これは私がやったことです。 vcsjones ' の回答です。

# 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> 新しい "clean-slate branch" のために必要なことは、次のとおりです。

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

今後、私は常にこのように新しいリポジトリを作成するつもりです。

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

...そのため、最初のコミットは そして、常に新しい独立したブランチを開始するために利用可能です。 (これは非常に稀にしか必要とされない機能であることは分かっていますが、簡単に利用できるようにすることは非常に簡単です)。

解決するには?

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

git checkout --orphan YourBranchName

これはゼロコミットで新しいブランチを作成しますが、すべてのファイルがステージされます。この時点で、それらを削除することができます。

("remove them": A git reset --hard はインデックスを空にし、空の作業ツリーを残します)

を見てみましょう。 マンページ をチェックアウトすると、--orphan の詳細が表示されます。