practices - git remove tag
Deshacer la última confirmación/combinación (3)
He arruinado un poco mi repositorio de git. Trabajé en una función en una rama separada. Después de terminar el trabajo, cambié al maestro para fusionarlo, pero mi compañero empujó algunos archivos que entraron en conflicto con el mío. Después de la fusión, el conflicto y los nuevos cambios, vi que también cometí los cambios más antiguos de mi compañero.
Ahora quiero rehacer este commit / merge. Intenté git reset --soft HEAD^
pero cuando quise presionar, recibí este mensaje de error Merge the remote changes before pushing again
.
¿Alguien puede ayudarme?
El problema aquí es que desea deshacer los cambios que ya ha enviado al repositorio central. Si no los hubieras presionado en primer lugar, un git reset --hard / - soft / - mixed HEAD ^ habría hecho el truco.
Entonces, cuando haya reiniciado su HEAD, git se quejará cuando intente ir al origen y actualizar la referencia remota que no es un antepasado de su HEAD. Use --force:
git push --force origin master
Jeje, casi lo descubriste:
git reset --hard HEAD^
Su rama de características seguirá apuntando a su trabajo. No perderás esos cambios.
Como plaes dijo, puedes restablecer el master back one con
git reset --hard HEAD^
Si desea obtener algunos archivos específicos de su sucursal sin fusionarlos, puede consultarlos:
git checkout yourbranch -- file1 file2 etc
Si desea obtener algunos archivos del maestro antes de la fusión, también puede consultar estos:
git checkout master^ -- file3 file4 etc
Esto no es ideal pero es lo que se necesita a veces. Una combinación / puede / significa que usted rechaza algunos cambios de cualquier lado en una combinación. La mejor manera de lograr una fusión adecuada es:
git merge --no-commit yourbranch
desde el maestro, luego ejecute los comandos de git checkout desde arriba y finalmente confirme:
git add . -A
git commit
Cuando empujes esta rama ahora, necesitarás agregar la opción de force
git push --force
o
git push -f
Espero que esto ayude.