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 A
desse 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 A
possí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/…