Me gustaría definir una nueva rama "raíz" en este repositorio de git. Por rama "raíz" me refiero a una rama que es completamente independiente de todas las otras ramas en el repositorio 1 .
Desafortunadamente, incluso el commit (llamémoslo A) en la base del árbol de commit del repositorio contiene muchos archivos (este fue un repositorio que se inicializó en un proyecto ya bastante maduro).
Esto significa que incluso si di Acomo la nueva rama <start-point>, esta nueva rama no comenzaría desde una "pizarra limpia", sino que contendría todos los archivos que se confirmaron A.
¿Hay alguna forma de que pueda crear una rama completamente desnuda en este repositorio, con la <start-point>mayor precisión Aposible?
1 Por cierto, esto no es equivalente a crear un nuevo repositorio. Los repositorios separados serían menos convenientes por muchas razones.
EDITAR : OK, esto es lo que hice, basado en la respuesta de 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
Aunque este procedimiento es un poco complicado, el resultado final es una confirmación de base vacía que puede servir <start-point>para cualquier nueva "rama de pizarra limpia"; todo lo que necesito hacer es
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
En el futuro siempre crearé nuevos repositorios como este:
git init
git commit --allow-empty -m 'base commit (empty)'
... para que la primera confirmación esté vacía y siempre disponible para iniciar una nueva rama independiente. (Esta sería, lo sé, una instalación que rara vez se necesita, pero es bastante fácil ponerla a disposición).
git rebase --onto, consulte stackoverflow.com/questions/645450/…