¿Cómo recupero archivos que se borraron al hacer un push rebase en Git?

publicado por: Anonymous

espero por favor me ayuden. Tenía un proyecto en NetBeans el cual quise colocarlo en un repositorio en BitBucket, el problema es que yo hice un commit y luego hice un rebase push, ahora todos los archivos que tenía en mi carpeta local, es decir los .java, ya no están. Ojalá me puedan ayudar.

solución

Traducción de la respuesta original por Charles Bailey

El camino más fácil sería de encontrar cuál era la HEAD de la rama inmediatamente antes del comando rebase, para lo que podemos mirar el reflog

git reflog

y restablecer la rama actual a ese estado (con la advertencia habitual de estar absolutamente seguro antes de usar reset con la opción --hard).

Supongamos que el commit anterior era [email protected]{5} en el reflog, entonces:

git reset --hard [email protected]{5}

En Windows, es posible que debas usar comillas alrededor de la referencia:

git reset --hard "[email protected]{5}"

Puedes antes verificar el historial del antiguo HEAD candidato simplemente haciendo un git log [email protected]{5} (Windows: git log "[email protected]{5}").

Si no has desactivado la opción de tener reflogs por rama, deberías poder hacer simplemente, git reflog [email protected]{1} ya que una operación rebase separa la cabeza de rama antes de volver a colocarla en la cabeza final. Comprueba bien esto, ya que yo no lo he verificado desde hace tiempo.

Por defecto, todos los reflogs están activados para repositorios no-bare:

[core]
    logAllRefUpdates = true

Otra información adicional: (traducido de esta respuesta)

Lo primero ¿qué es HEAD?

HEAD es simplemente una referencia al commit actual (más reciente) en la rama actual. Solo puede haber 1 HEAD en cualquier momento dado.

Si no está en el último commit, lo que significa que HEAD apunta aun commit previo en la historia, se llama detached HEAD (HEAD desconectado).

enter image description here

Algunas opciones:

git checkout

git checkout <commit_id>

git reflog

Siempre puedes usar el reflog también

git reflog
git checkout [email protected]{...}

Esto te devolverá a tu commit deseado

enter image description here


git reset HEAD --hard <commit_id>

"Mueve" la cabeza al commit deseado.

# Esto destruirá cualquier modificación local.
# No lo haga si tiene un trabajo no guardado que desea mantener.
git reset --hard 0d1d7fc32

# Alternativamente, si hay trabajo para conservar:
git stash
git reset --hard 0d1d7fc32
git stash pop
# Esto guarda las modificaciones, luego vuelve a aplicar ese parche después del reset.
# Podría obtener conflictos de _merge_, si ha modificado cosas que 
# habían cambiado desde el commit a que volvió con reset.
  • Nota: ( Desde Git 2.7 )
    también puede usar el git rebase --no-autostash.

git checkout

git checkout -b <new branch> <commit_id>
git checkout HEAD~X //x es la cantidad de commits que retrocede

Esto creará una nueva rama apuntando al commit deseado


Aquí hay un esquema general de lo que se puede hacer.

enter image description here

Aquí está la Respuesta Original

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *