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é eliminarla 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, por lo 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 compromiso en la historia porque hago algunas fusiones.
¿Alguien puede explicar qué está pasando y cómo solucionar este problema?
git
github
pull-request
asombrado
fuente
fuente
what branch
= la rama en la que está trabajando,onto what branch
= la rama a la que está ingresando la solicitudRespuestas:
Tienes varias técnicas para hacerlo.
Esta publicación: lea la parte sobre la reversión y explicará en detalle lo que queremos hacer y cómo hacerlo.
Aquí está la solución más simple a su problema:
El comando revert creará una nueva confirmación con el deshacer de la confirmación original.
fuente
A la gente no le gustaría ver un compromiso incorrecto y un compromiso de reversión para deshacer los cambios del compromiso incorrecto. Esto contamina comete la historia.
Aquí hay una forma sencilla 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
// dónden
es el número de últimas confirmaciones que desea incluir en la rebase interactiva.pick
condrop
confirmaciones que desea descartar.git push --force
fuente
git push origin HEAD:myBranch --force
. Pero por lo demás genial y útil.git rebase -i HEAD~<n>
, en la parte superior del archivo habrá<n>
líneas de confirmaciones, con cada línea que contiene el textopick <commit id>
. Las confirmaciones predeterminadas sonpick
, por lo que para cada confirmación que desee eliminar, cambie el textopick
adrop
Si está eliminando una confirmación y no desea mantener sus cambios, @ferit tiene una buena solución.
Si desea agregar ese compromiso a la rama actual, pero no tiene sentido ser parte del pr actual, puede hacer lo siguiente en su lugar:
git rebase -i HEAD~n
git reset HEAD^ --soft
para deshacer los cambios y devolverlos a un estado por etapas.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.
fuente
Entonces haz lo siguiente,
Digamos que el nombre de su rama 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 de git)git checkout my_branch
gitk
(Esto abrirá la consola de git)reset branch to here
"git pull --rebase origin branch_name_to _merge_to
git cherry-pick <SHA you copied in step 3. >
Ahora mire el historial de confirmaciones de la sucursal local y asegúrese de que todo se vea bien.
fuente
Esto es lo que me ayudó:
Crea una nueva rama con la existente. Llamemos al existente
branch_old
y al nuevo comobranch_new
.Restablezca
branch_new
a un estado estable, cuando no tuvo ningún problema para comprometerse. Por ejemplo, para ponerlo en el nivel de su maestro local, haga lo siguiente:git reset —hard master git push —force origin
cherry-pick
las confirmaciones debranch_old
enbranch_new
git push
fuente