Я хотел бы определить новую ветвь "root" в этом репозитории git. Под "корневой" ветвью я подразумеваю ветвь, полностью независимую от всех остальных ветвей в репозитории 1.
К сожалению, даже фиксация (пусть ее называют A
) в самой базе дерева репо commit содержит много файлов (это был репозиторий, который был инициализирован на уже довольно зрелом проекте).
Это означает, что даже если я дал A
как новую ветвь <start-point>
, эта новая ветвь не начиналась бы с "чистого слайда", а скорее содержала бы все файлы, которые были зафиксированы в A
.
Можно ли создать в этом репозитории полностью голую ветвь с <start-point>
как можно ближе к A
?
1 BTW, это не эквивалентно созданию нового репо. Отдельные репозитории были бы менее удобны по многим причинам.
EDIT: ОК, это то, что я сделал, на основе 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 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)'
... так что первая фиксация пусто и всегда доступна для запуска новой независимой ветки. (Это было бы, я знаю, очень редко требуемое средство, но это довольно легко сделать его доступным.)