Я хотел бы определить новую «корневую» ветку в этом репозитории git. Под «корневой» веткой я подразумеваю ветвь, которая полностью независима от всех других ветвей в репозитории 1 .
К сожалению, даже коммит (назовем его A) в самом основании дерева коммитов репо содержит множество файлов (это был репозиторий, который был инициализирован в уже достаточно зрелом проекте).
Это означает, что даже если бы я дал Aновую ветку <start-point>, эта новая ветка не начиналась бы с «чистого листа», а скорее содержала бы все файлы, которые были зафиксированы A.
Есть ли способ создать полностью голую ветку в этом репозитории, <start-point>максимально приближенную к ней A?
1 BTW, это не эквивалентно созданию нового репо. Отдельные репозитории менее удобны по многим причинам.
РЕДАКТИРОВАТЬ : ОК, это то, что я сделал, основываясь на ответе 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
Хотя эта процедура немного сложна, конечный результат - пустая базовая фиксация, которая может служить в качестве <start-point>новой для любой новой «ветки с чистого листа»; все, что мне нужно сделать, это
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
В будущем я всегда буду создавать такие новые репозитории:
git init
git commit --allow-empty -m 'base commit (empty)'
... так что первая фиксация пуста и всегда доступна для запуска новой независимой ветки. (Я знаю, что это может быть очень редко необходимое средство, но сделать его легко доступным.)
git rebase --onto, см stackoverflow.com/questions/645450/...