Vorrei definire un nuovo ramo "root" in questo repository git. Per ramo "radice" intendo un ramo che è completamente indipendente da tutti gli altri rami nel repository 1 .
Sfortunatamente, anche il commit (chiamiamolo così A) alla base dell'albero di commit del repository contiene molti file (questo era un repository inizializzato su un progetto già abbastanza maturo).
Ciò significa che anche se avessi dato Acome nuovo ramo <start-point>, questo nuovo ramo non sarebbe partito da una "lavagna pulita", ma piuttosto conterrebbe tutti i file in cui è stato eseguito il commit A.
Esiste un modo per creare un ramo completamente nudo in questo repository, con il <start-point>più vicino Apossibile?
1 A proposito, questo non equivale alla creazione di un nuovo repository. Repos separati sarebbero meno convenienti per molte ragioni.
EDIT : OK, questo è quello che ho fatto, in base alla risposta di 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
Sebbene questa procedura sia un po 'complicata, il risultato finale è un commit di base vuoto che può fungere da <start-point>per ogni nuovo "ramo clean-slate"; tutto ciò che dovrei fare allora è
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
In futuro creerò sempre nuovi repository come questo:
git init
git commit --allow-empty -m 'base commit (empty)'
... in modo che il primo commit sia vuoto e sempre disponibile per l'avvio di una nuova filiale indipendente. (Questo sarebbe, lo so, una struttura molto raramente necessaria, ma è abbastanza facile renderlo facilmente disponibile.)
git rebase --onto, vedere stackoverflow.com/questions/645450/...