Je voudrais définir une nouvelle branche "racine" dans ce dépôt git. Par branche "racine", j'entends une branche qui est entièrement indépendante de toutes les autres branches du référentiel 1 .
Malheureusement, même le commit (appelons-le A) à la base même de l'arborescence de commit du dépôt contient beaucoup de fichiers (il s'agissait d'un dépôt initialisé sur un projet déjà assez mature).
Cela signifie que même si je donnais Acomme nouvelle branche <start-point>, cette nouvelle branche ne partirait pas d'une "table rase", mais contiendrait plutôt tous les fichiers qui ont été validés A.
Existe-t-il un moyen de créer une branche complètement nue dans ce référentiel, avec le <start-point>plus près Apossible?
1 BTW, c'est n'équivaut pas à créer un nouveau repo. Des dépôts séparés seraient moins pratiques pour de nombreuses raisons.
EDIT : OK, c'est ce que j'ai fait, basé sur la réponse de 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
Bien que cette procédure soit un peu compliquée, le résultat final est un commit de base vide qui peut servir de <start-point>pour toute nouvelle "branche propre"; tout ce que je devrais faire alors c'est
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
À l'avenir, je créerai toujours de nouveaux référentiels comme celui-ci:
git init
git commit --allow-empty -m 'base commit (empty)'
... pour que le premier commit soit vide , et toujours disponible pour démarrer une nouvelle branche indépendante. (Ce serait, je sais, une installation très rarement nécessaire, mais il est assez facile de la rendre facilement disponible.)
git rebase --onto, voir stackoverflow.com/questions/645450/...