Eu gostaria de definir um novo ramo "raiz" neste repositório git. Por ramo "raiz", quero dizer um ramo que é totalmente independente de todos os outros ramos no repositório 1 .
Infelizmente, mesmo o commit (vamos chamá-lo A) na base da árvore de commit do repositório contém muitos arquivos (este foi um repositório que foi inicializado em um projeto já bastante maduro).
Isso significa que, mesmo que eu Adesse como o novo ramo <start-point>, esse novo ramo não seria iniciado a partir de uma "lista limpa", mas conteria todos os arquivos que foram confirmados A.
Existe alguma maneira de criar uma ramificação completamente vazia neste repositório, o <start-point>mais próximo Apossível?
1 BTW, isso não é equivalente a criar um novo repositório. Os repositórios separados seriam menos convenientes por várias razões.
EDIT : OK, foi o que fiz, com base na resposta do 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
Embora esse procedimento esteja um pouco envolvido, o resultado final é uma confirmação de base vazia que pode servir como <start-point>para qualquer nova "ramificação limpa"; tudo o que eu preciso fazer então é
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
No futuro, sempre criarei novos repositórios como este:
git init
git commit --allow-empty -m 'base commit (empty)'
... para que o primeiro commit esteja vazio e sempre disponível para iniciar uma nova ramificação independente. (Sei que seria uma instalação muito raramente necessária, mas é muito fácil torná-la disponível.)
git rebase --onto, veja stackoverflow.com/questions/645450/…