¿Cómo puedo rebase la primera confirmación?

Resuelto lxs asked hace 10 años • 2 respuestas

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~3aparece el error - fatal: invalid upstream 'HEAD~3'.

Si intento lo mismo, HEAD~2funciona 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'  
lxs avatar Apr 10 '14 22:04 lxs
Aceptado

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 --orphanto 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 --roottermina 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.

torek avatar Apr 10 '2014 22:04 torek

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.

sworisbreathing avatar Jul 07 '2021 03:07 sworisbreathing