Ich möchte einen neuen "Root" -Zweig in diesem Git-Repository definieren. Mit "Root" -Zweig meine ich einen Zweig, der völlig unabhängig von allen anderen Zweigen im Repository ist 1 ist .
Leider auch das Commit (nennen wir es A ) ganz unten im Commit-Baum des Repos viele Dateien (dies war ein Repository, das in einem bereits ziemlich ausgereiften Projekt initialisiert wurde).
Das heißt, auch wenn ich Aals neue Filiale gegeben habe<start-point> angeben würde, dieser neue Zweig nicht von einem "sauberen Schiefer" ausgehen würde, sondern alle Dateien enthalten würde, die festgeschrieben wurden A.
Gibt es eine Möglichkeit, einen vollständig leeren Zweig in diesem Repository <start-point>so nah Awie möglich zu erstellen ?
1 Übrigens ist dies nicht eine neue repo Schaffung äquivalent. Separate Repos wären aus vielen Gründen weniger bequem.
EDIT : OK, das habe ich getan, basierend auf der Antwort von 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
Obwohl diese Prozedur etwas kompliziert ist, ist das Endergebnis ein leeres Basis-Commit, das als <start-point>für jeden neuen "Clean-Slate-Zweig" dienen kann. Alles was ich dann tun müsste ist
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
In Zukunft werde ich immer neue Repositorys wie diese erstellen:
git init
git commit --allow-empty -m 'base commit (empty)'
... damit das erste Commit leer ist und immer zum Starten eines neuen unabhängigen Zweigs verfügbar ist. (Ich weiß, dies wäre eine sehr selten benötigte Einrichtung, aber es ist ziemlich mühelos, sie sofort verfügbar zu machen.)
git rebase --onto, siehe stackoverflow.com/questions/645450/...