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 .Jak utworzyć nową (i pustą!) Gałąź "root"?
Niestety, nawet zatwierdzenie (nazwijmy to A
) na samym początku drzewa zatwierdzania repo zawiera wiele plików (było to repozytorium zainicjowane na już dość dojrzałym projekcie).
Oznacza to, że nawet jeśli dałem A
jako nowego oddziału <start-point>
, ten nowy oddział nie ruszy z „czystym kontem”, ale raczej będzie ona zawierać wszystkie pliki, które zostały popełnione w A
.
Czy jest jakiś sposób mogę stworzyć zupełnie gołe oddział w tym repozytorium, z <start-point>
tak blisko A
jak to możliwe?
okazji, to nie równoważne do tworzenia nowego repo. Oddzielne transakcje repo byłyby mniej wygodne z wielu powodów.
EDIT: OK, to jest to, co zrobiłem, na podstawie vcsjones 'Odpowiedź:
# 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 zaangażowane, wynik końcowy jest pusty podstawowa instrukcja zatwierdzenia, która może służyć jako <start-point>
dla każdej nowej "czystej gałęzi"; wszystko bym trzeba zrobić wtedy jest
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
W przyszłości będę zawsze tworzyć nowe repozytoria tak:
git init
git commit --allow-empty -m 'base commit (empty)'
... tak, że pierwszy popełnić jest pusty, i zawsze dostępne do założenia nowego niezależnego oddziału. (Byłoby to, co wiem, to bardzo rzadko potrzebne zakład, ale to jest zupełnie bez wysiłku, aby go łatwo dostępne.)
Duplikat http://stackoverflow.com/questions/13969050/how-to-create-a-new-empty-branch-for-a-new-project – Anonymoose
@ Anonimoose: Tylko dla zapisu (zamiast debaty): nie zgadzam się z twoją opinią. – kjo
Wydaje się, że istnieje znacznie prostsze rozwiązanie oparte na 'git rebase --onto', zobacz http://stackoverflow.com/questions/645450/insert-a-commit-before-the-root-commit-in-git –