2012-10-12 176 views
14

Creo que he cometido un error aquí.Revertir al Compromiso Previo - Github para MAC (una reversión ya está en progreso)

Hice algunos cambios en mi código desde un último commit agregando nuevas funcionalidades y me di cuenta de que algún otro código ahora estaba actuando de forma extraña. Decidí volver a una confirmación anterior (también presionada a control remoto) para probar si esa funcionalidad estaba funcionando para entonces.

Antes de presionar Rollback, cometí los cambios realizados actualmente porque no quería perderlos. Después de comprometerme (no presionar a control remoto), hice la reversión a ese compromiso anterior. (Nótese que hubo bastantes commits entre el commit me roll respaldado y el que cometí en este momento).

Todo funcionó bien y mi código revertido a esa confirmación. La funcionalidad también se estaba comportando mal allí, así que decidí volver a mi compromiso más reciente.

Sin embargo, no sabía cómo hacerlo, excepto Volviendo al último compromiso. Pero me dio un error.

error: a cherry-pick or revert is already in progress 
hint: try "git cherry-pick (--continue | --quit | --abort)" 
fatal: revert failed 
(32768) 

Ahora, parece que la mayoría de las cosas están de vuelta, pero la versión actual del código no es lo mismo que mi última confirmación. Está en algún punto intermedio. = (

¿Qué hice mal? [No estoy pidiendo a cabo de inocencia, sé que hice mal;)]

¿Cuál era la forma correcta de hacerlo? [Creo que debería haber ramificado primera]

Respuesta

17

No sé lo que github para Mac rollback hace, pero parece que sería mejor usar la línea de comandos para resolver el problema que nos ocupa:

git cherry-pick --abort - a detener cualquier cherry picking en curso

git branch -va - le mostrará dónde están sus punteros en este momento

asegúrese de que el directorio de trabajo es limpio: git status - no debe mostrar todos los archivos modificados o por etapas

git stash - si algo modificado sigue presente

git reset --hard your_local_branch github/remote_branch - hacer rama local refleja el estado en que está en el lado remoto. obviamente no necesita hacer un reinicio si su rama actual apuntará a la misma confirmación que el control remoto. Si estás en estado de HEAD aislado (el estado de git te lo informará), entonces, para volver al estado normal, simplemente revisa tu sucursal local.

Ahora decidir lo que realmente quiere lograr:

I. deshacerse de la defectuosa comprometerse?

Uso rebase interactivo y quitar la línea defectuosa con cometer, a continuación, fuerza de empuje al repositorio remoto en GitHub (digamos defectuosa commit sucedido hace 10 commit)

git rebase -i HEAD~11

II. revertir commit defectuoso? - No recomendaría hacer eso después de otras confirmaciones, a menos que esté absolutamente seguro de que las siguientes confirmaciones no tocaron el mismo fragmento de código.Esto creará efectivamente una inversa cometer (si la línea se añadió por defectuoso cometer será eliminado por revert y viceversa)

git revert {commit-sha1}

III. ¿Enmendar compromiso defectuoso? utilice una rebase interactiva, pero pídales que se detengan cuando se cometen errores para enmendarlos. Cuando se detiene, edite el cambio y continúe con la rebase, luego fuerce el envío a la sucursal remota (use el comando rebase de la solución I)

Después de terminar si se ocultó algo, use git stash pop para recuperar los cambios.

Espero que ayude!

Cuestiones relacionadas