Vorrei definire un nuovo ramo "root" in questo repository git. Per ramo "root" intendo un ramo che è del tutto indipendente da tutti gli altri rami nel repository .Come creare un nuovo (e vuoto!) Ramo "root"?
Sfortunatamente, anche il commit (chiamiamolo A
) alla base della commit tree del repository contiene molti file (questo era un repository inizializzato su un progetto già abbastanza maturo).
Questo significa che anche se ho dato A
come la nuova filiale del <start-point>
, questo nuovo ramo non partiva da una "tabula rasa", ma piuttosto sarebbe contenere tutti i file che sono stati commessi in A
.
C'è un modo per creare un ramo completamente nudo in questo repository, con il più vicino possibile a A
?
proposito, questa è non equivale alla creazione di un nuovo repo. Repositi separati sarebbero meno convenienti per molte ragioni.
EDIT: Ok, questo è quello che ho fatto, sulla base di vcsjones 'risposta:
# 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
Anche se questa procedura è un po' coinvolti, il risultato finale è un vuoto commit di base che può servire come <start-point>
per qualsiasi nuovo "ramo clean-slate"; tutto quello che avevo bisogno di fare è quindi
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
In futuro sarò sempre creare nuovi repository così:
git init
git commit --allow-empty -m 'base commit (empty)'
... in modo che il primo commit è vuoto, e sempre disponibile per l'avvio di una nuova filiale indipendente. (Questo sarebbe, lo so, una struttura molto raramente necessaria, ma è abbastanza facile da rendere più facilmente accessibile.)
duplicati di http://stackoverflow.com/questions/13969050/how-to-create-a-new-empty-branch-for-a-new-project – Anonymoose
@ Anonymoose: solo per la cronaca (piuttosto che per la discussione): non sono d'accordo con la tua opinione. – kjo
Sembra esserci una soluzione molto più semplice basata su 'git rebase --onto', vedi http://stackoverflow.com/questions/645450/insert-a-commit-before-the-root-commit-in-git –