このgitリポジトリに新しい "root"ブランチを定義したいと思います。 "ルート"ブランチとは、リポジトリ内の他のすべてのブランチから完全に独立しているブランチを意味します。。新しい(そして空の!) "ルート"ブランチを作成するには?
残念ながら、リポジトリのコミットツリーの根底にあるコミット(これにはA
と呼ぶこともあります)にも、かなり成熟したプロジェクトで初期化されたリポジトリがたくさんあります。
これは、新しいブランチの<start-point>
としてA
を付与したとしても、この新しいブランチは「クリーンスレート」から開始するのではなく、A
でコミットされたすべてのファイルを含むことを意味します。
このレポジトリに完全にベアブランチを作成する方法はありますか?<start-point>
はできるだけA
に近いものにしますか?
ところで、これは新しいリポジトリを作成することと同じではないです。分離したリポジトリは、多くの理由からあまり便利ではありません。
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>
として機能します。常に最初空でコミットするように...
git init
git commit --allow-empty -m 'base commit (empty)'
を、そして:私は、行う必要があるだろう、すべては
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
将来的には私はいつもこのように新しいリポジトリを作成しますです新しい独立したブランチを開始するために利用できます。 (これは、私が知っている、非常にほとんど必要ありません施設だろうが、それは容易に利用できるようにすることは非常に簡単です)
重複http://stackoverflow.com/questions/13969050/how-to-create-a-new-empty-branch-for-a-new-project – Anonymoose
@:あなたがすべき念頭に置いたものとAnonymoose:(議論ではなく)記録のためだけに:私はあなたの意見に同意します。 – kjo
'git rebase --onto'に基づくもっと簡単な解決策があるようです。http://stackoverflow.com/questions/645450/insert-a-commit-before-the-root-commit-in-git –