Я хотів би визначити нову гілку "root" у цьому сховищі git. Під «кореневою» гілкою я маю на увазі гілку, повністю незалежну від усіх інших гілок у сховищі 1 .
На жаль, навіть фіксація (назвемо це A) у самій основі дерева фіксів репо містить багато файлів (це було сховище, яке було ініціалізовано на вже досить зрілому проекті).
Це означає, що навіть якби я дав Aнову гілку <start-point>, ця нова гілка не починалася б з "чистого аркуша", а скоріше містила б усі файли, які були зроблені в A.
Чи є якимось чином я можу створити цілком оголену гілку в цьому сховищі, <start-point>якомога ближче A?
1 BTW, це не еквівалентно створенню нового репо. Окремі репости були б менш зручними з багатьох причин.
EDIT : Гаразд, це я і зробив, грунтуючись на відповіді 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 checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
В майбутньому я завжди буду створювати такі сховища:
git init
git commit --allow-empty -m 'base commit (empty)'
... так що перша комісія порожня і завжди доступна для запуску нової незалежної гілки. (Я знаю, це дуже рідко потрібне обладнання, але зробити його легко доступним.)
git rebase --onto, див stackoverflow.com/questions/645450 / ...