tag remove practices example describe create crear best git version-control commit revert

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.