Quiero retroceder a una confirmación anterior, luego publicar ese código y luego volver a la última confirmación.
es decir, mi maestro está apuntando a una versión de confirmación anterior solo para que pueda pulir esa versión, luego quiero volver a la última confirmación que tenía inicialmente.
¿Cómo puedo hacer esto?
Tu pregunta no está clara. Creo que lo que estás pidiendo es esto:
¿Qué hará esto? Impulsará el
$old_commit_id
compromiso deorigin
como el nuevo jefe deorigin
lamaster
rama de.Si eso es lo que desea, no necesita tocar su
master
sucursal local en absoluto.fuente
master (non-fast-forward)
fracaso. La solución @jtdubs funcionó.-f
para forzarlo, aunque el repositorio remoto puede estar configurado para prohibirlo. Actualicé la respuesta.utilizar
git reset --hard <old commit number>
restablecerá el HEAD a esta confirmación anterior.
Además, también debe usar
git push -f origin
para modificar el repositorio remoto.fuente
Si desea evitar el empuje forzado, aquí le mostramos cómo revertir su repositorio a una confirmación anterior y preservar todo el trabajo intermedio:
git checkout 307a5cd # check out the commit that you want to reset to git checkout -b fixy # create a branch named fixy to do the work git merge -s ours master # merge master's history without changing any files git checkout master # switch back to master git merge fixy # and merge in the fixed branch git push # done, no need to force push!
¡Hecho! Reemplace 307a5cd con cualquier confirmación que desee en su repositorio.
(Sé que las dos primeras líneas se pueden combinar, pero creo que eso deja menos claro lo que está pasando)
Aquí está gráficamente:
Elimina efectivamente c3 y c4 y vuelve a establecer su proyecto en c2. Sin embargo, c3 y c4 todavía están disponibles en el historial de tu proyecto si alguna vez quieres volver a verlos.
fuente
Suponiendo un gráfico de confirmación como este:
Primero desea pagar
master
y crear una sucursal que apunte a dondemaster
se encuentra actualmente:Debería verse así ahora:
Ahora que ya estas en
master
, le diremos a lamaster
rama que retroceda una confirmación:Ahora,
master
debería retroceder un espacio, pero lapointer
rama todavía está en la confirmación más reciente:En este punto, puede presionar
master
a un control remoto, o donde quiera, luego avanzar rápido fusionarlo de nuevo alpointer
rama. Puedes matar lapointer
rama en ese punto:Final:
fuente
git push origin master
fallará con la punta de su rama actual detrás de su contraparte remota . También debe pasar una bandera -f.Puede simplemente
git checkout <commit-id>
hacer lo que sea necesario y luegogit checkout master
volver al nuevo código.Si realmente necesita modificar el código anterior para publicarlo, probablemente debería:
Además, no puedo recomendar git flow lo suficiente. Hace todo esto bastante fácil.
fuente
Para pasar a una versión anterior:
git checkout <version hash>
haz tu trabajo aquí y comprométete con
git commit --amend
Para volver al maestro :
git checkout master
fuente
git reset --hard
apuntó su rama maestra de nuevo a la confirmación anterior, porgit checkout master
lo que no hará nada.commit --amend
paso es lo suficientemente útil--amend
?