2012-01-20 17 views
52

Comencé a trabajar en un proyecto y realicé algunas confirmaciones no deseadas que envié al maestro de origen. Ahora, cuando intento hacer una solicitud de extracción, Github quiere comprometer todas las confirmaciones anteriores.Git Elimina las confirmaciones no deseadas de una Solicitud de extracción

Mi pregunta es, ¿cómo elimino los commits no deseados y confirmo los cambios que deseo confirmar para estar actualizado con el master?

+0

Busque "git rebase". puedes aplastar los commits juntos y dejar algunos commits. –

Respuesta

34

Supongo que su origen es su propio tenedor de algún proyecto que desea hacer una solicitud de extracción también?

Como va a cambiar el historial (al reiniciar el cabezal) deberá presionar con --force flag. Busque el hash de su última confirmación utilizando git log.

Ahora ejecute

git reset SHA 

Esto cambiará su cabeza para que el sha y preservar los cambios en los archivos desde la última buena cometió, el índice también se restablecerá.

Ahora puede cambiar su código y hacer las confirmaciones que desee. Pero tiene que hacer git push --force ya que cambió el historial del repositorio. Esto significa que cualquier persona que haya bifurcado su repositorio ya no podrá realizar más cambios. Pero podrás hacer una solicitud de extracción a tu upstream.

+0

¿Forzar solo un problema si alguien bifurca la rama en la que se basa mi solicitud de extracción? ¿O si hacen algún fork en mi repositorio? Si eliminan la rama ofensiva, ¿pueden volver a sincronizarse con mi repositorio? ¿Hay alguna manera de eliminar las confirmaciones de una solicitud de extracción sin necesidad de forzar? – endolith

+1

@endolith Solo si basan confirmaciones en su rama. Cualquier confirmación que sea un descendiente de una confirmación que luego se base de nuevo se verá afectada y no se podrá fusionar trivialmente ya que la confirmación original ya no existe. Siempre y cuando nadie se fusione o base se comprometa en su petición de extracción hasta que su fuerza forzada empuje su libertad para cambiar su solicitud de empuje forzando a su sucursal si así lo desea. No debería suceder si deja en claro en su solicitud de extracción su cambio activo. –

+0

La solicitud de extracción debe estar abierta para que el cambio de rama entre en vigor –

0

Si está utilizando git gui, vaya a git gui y visualice el historial de sucursal. (antes de hacer el siguiente paso, haga una copia de seguridad de los cambios locales que desee realizar) Haga clic con el botón derecho en el punto donde la rama desea restablecer al maestro y haga clic en Restablecer. Después de restablecer, en la línea de comandos, escriba git push -f Ahora realice los cambios necesarios en la bifurcación, confirme y vuelva a presionar. Si crea una solicitud de extracción ahora, solo tendrá la nueva confirmación después del restablecimiento de la bifurcación.

Cuestiones relacionadas