¿Cómo puedo rebase la primera confirmación?
Solía git init
crear un repositorio nuevo y luego hice tres confirmaciones. Ahora quiero cambiar la base para volver atrás y modificar mi primera confirmación, pero si lo hago, git rebase -i HEAD~3
aparece el error - fatal: invalid upstream 'HEAD~3'
.
Si intento lo mismo, HEAD~2
funciona un poco, pero solo me permite reorganizar las dos últimas confirmaciones.
¿Cómo me refiero al 'compromiso antes de que hubiera compromisos' o vuelvo atrás e inserto un compromiso vacío?
ERROR con git rebase -i HEAD~3
:
fatal: invalid upstream 'HEAD~3'
La manera más fácil, con un Git bastante reciente (esto ha estado disponible desde hace mucho tiempo, por lo que deberías tener esto):
git rebase -i --root
La otra manera fácil, como señaló twalberg en un comentario que desde entonces se eliminó pero que ahora se expandió en la respuesta de https://stackoverflow.com/a/68279810/1256452 , es usar git checkout --orphan
to setup para realizar una nueva confirmación raíz, que puedes copiar las confirmaciones antiguas encima. (De todos modos, esto es lo que rebase -i --root
termina haciendo internamente). Para algunos propósitos, como dividir lo que había sido el compromiso inicial, este compromiso inicial en blanco es útil.
Nota al margen del futuro (2022): a menudo es una buena idea hacer que la primera confirmación contenga solo unos pocos archivos repetitivos como un archivo README
. La primera confirmación en cualquier repositorio nuevo y vacío siempre es un poco especial. Tenga en cuenta que si utiliza sitios de alojamiento como Bitbucket, GitHub y GitLab, a menudo realizarán dicha confirmación inicial cuando cree un repositorio allí, para que pueda clonar el repositorio así creado y tener un punto de partida.
La respuesta de Torek está bien si desea realizar cambios en los archivos que ya están en la confirmación, editar el autor/mensaje, etc. Pero si desea dividir la confirmación o algo así, entonces es probable que se encuentre con problema porque no puedes hacerlo git reset HEAD~
desde el compromiso inicial.
Para que esto sea posible, puedes insertar una confirmación inicial vacía como esta:
git checkout --orphan empty-initial-commit
git rm -r --cached .
git clean -d -f
git commit --allow-empty -m 'Empty initial commit'
git checkout <branch>
git rebase empty-initial-commit
git branch -d empty-initial-commit
luego puede hacer git rebase -i
, editar la confirmación (la primera confirmación no vacía) y hacer git reset HEAD~
lo normal.