Chciałbym zdefiniować nową gałąź „root” w tym repozytorium git. Przez gałąź "root" rozumiem gałąź, która jest całkowicie niezależna od wszystkich innych gałęzi w repozytorium 1 .
Niestety, nawet zatwierdzenie (nazwijmy to A) w samej podstawie drzewa zatwierdzeń repozytorium zawiera wiele plików (było to repozytorium zainicjowane w już dość dojrzałym projekcie).
Oznacza to, że nawet gdybym podał Ajako nową gałąź <start-point>, ta nowa gałąź nie zaczynałby się od „czystej karty”, ale raczej zawierałaby wszystkie zatwierdzone pliki A.
Czy jest jakiś sposób, żebym mógł stworzyć całkowicie nagą gałąź w tym repozytorium, <start-point>tak blisko, Ajak to możliwe?
1 BTW, nie jest to równoznaczne z utworzeniem nowego repozytorium. Oddzielne repozytoria byłyby mniej wygodne z wielu powodów.
EDYCJA : OK, oto co zrobiłem na podstawie odpowiedzi 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
Chociaż ta procedura jest nieco skomplikowana, wynikiem końcowym jest puste zatwierdzenie podstawowe, które może służyć jako <start-point>nowa gałąź „clean-slate”; wszystko co wtedy musiałbym zrobić to
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
W przyszłości zawsze będę tworzyć nowe repozytoria, takie jak to:
git init
git commit --allow-empty -m 'base commit (empty)'
... tak, że pierwsze zatwierdzenie jest puste i zawsze dostępne do rozpoczęcia nowej niezależnej gałęzi. (Wiem, że byłby to bardzo rzadko potrzebny obiekt, ale łatwo jest go udostępnić).