git - salir - Cómo eliminar confirmaciones de una solicitud de extracción
overwrite last commit git (4)
Hice una solicitud de extracción, pero después de eso hice algunos compromisos con el proyecto localmente, lo que terminó contaminando mi solicitud de extracción, intenté eliminarlo, pero sin suerte.
Encontré algunas preguntas similares en StackOverflow pero no puedo aplicar lo que hay allí. Es mi primera solicitud de extracción en GitHub, así que me resulta un poco extraño cómo funciona todo esto.
La confirmación resaltada es la que necesito para mantener y eliminar todas las demás cosas. Se convierte en el cuarto commit en la historia porque hago algunas cosas de fusión.
¿Alguien puede explicar qué está pasando y cómo solucionar este problema?
A la gente no le gustaría ver un commit incorrecto y un commit revertido para deshacer los cambios del commit incorrecto. Esto contamina la historia del compromiso.
Aquí hay una manera simple de eliminar la confirmación incorrecta en lugar de deshacer los cambios con una confirmación de reversión.
-
git checkout my-pull-request-branch
-
git rebase -i HEAD~n
// donden
es el número de últimas confirmaciones que desea incluir en rebase interactivo. -
Reemplace
pick
condrop
para los commits que desea descartar. - Guardar y Salir.
-
git push --force
Entonces haz lo siguiente,
Digamos que el nombre de su sucursal es my_branch y esto tiene las confirmaciones adicionales.
-
git checkout -b my_branch_with_extra_commits
(Mantener esta rama guardada con un nombre diferente) -
gitk
(abre la consola git) - Busque el compromiso que desea mantener. Copie el SHA de ese compromiso en un bloc de notas.
-
git checkout my_branch
-
gitk
(Esto abrirá la consola git) -
Haga clic derecho en la confirmación a la que desea volver (Estado antes de sus cambios) y haga clic en "
reset branch to here
" -
Hacer un
git pull --rebase origin branch_name_to _merge_to
-
git cherry-pick <SHA you copied in step 3. >
Ahora mire el historial de confirmación de la sucursal local y asegúrese de que todo se vea bien.
Si está eliminando una confirmación y no desea mantener sus cambios, @ferit tiene una buena solución.
Si desea agregar esa confirmación a la rama actual, pero no tiene sentido ser parte de la pr actual, en su lugar, puede hacer lo siguiente:
-
use
git rebase -i HEAD~n
- Cambie la confirmación que desea eliminar a la posición inferior (más reciente)
- Guardar y Salir
-
use
git reset HEAD^ --soft
para descomprimir los cambios y recuperarlos en un estado por etapas. -
use
git push --force
para actualizar la rama remota sin su confirmación eliminada.
Ahora habrá eliminado la confirmación de su control remoto, pero aún tendrá los cambios localmente.
Tienes varias técnicas para hacerlo.
Esta publicación, lea la parte sobre la reversión , explicará en detalle lo que queremos hacer y cómo hacerlo.
Aquí está la solución más simple para su problema:
# Checkout the desired branch
git checkout <branch>
# Undo the desired commit
git revert <commit>
# Update the remote with the undo of the code
git push origin <branch>
El comando revertir creará un nuevo commit con el deshacer del commit original.