2011-04-11 31 views
14

He arruinado mi git repo un poco. Trabajé en una función en una rama separada. Después de terminar el trabajo, me 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.Deshacer último commit/merge

Ahora quiero rehacer este commit/merge. Intenté git reset --soft HEAD^ pero cuando quise empujar, conseguí este mensaje de error Merge the remote changes before pushing again.

¿Alguien me puede ayudar?

+0

http://stackoverflow.com/questions/1377845/git-reset-hard-and-a-remote-repository – plaes

Respuesta

5

Jeje, que casi lo descubrió:

git reset --hard HEAD^ 
+1

Hey plaes gracias por la respuesta, pero quiero mantener el archivos que he enviado incorrectamente ¿Hay una solución para eso? –

+0

'git reset --soft' puede ayudarlo. – LaraChicharo

27

Su rama de la característica todavía apuntará a su trabajo. No perderás esos cambios.

Como se ha dicho plaes, puede restablecer maestro vuelta uno con

git reset --hard HEAD^ 

Si quieres que consigan unas archivos específicos de su rama sin fusionar, se puede comprobar a cabo:

git checkout yourbranch -- file1 file2 etc 

Si usted quiere algunos archivos del maestro antes de la fusión también puede verificarlos:

git checkout master^ -- file3 file4 etc 

Esto no es ideal, pero a veces es lo que se necesita. Una fusión/puede/significa que rechaza algunos cambios de cualquier lado en una combinación. La mejor manera de lograr una combinación adecuada es:

git merge --no-commit yourbranch 

de maestro, a continuación, ejecutar los comandos git checkout desde arriba y, finalmente, se comprometen:

git add . -A 
git commit 

Cuando se presiona esta rama ahora, necesitará añadir la opción force

git push --force 

o

git push -f 

Espero que esto ayude.

+0

Gracias por responder adymitruk, probé el git 'reset --hard HEAD ^' y después de eso git push origen + maestro pero sigo teniendo un error con el mensaje '![remote rechazado] master -> master (pre-receive hook declinado) ' –

+0

si va a perder un commit en el control remoto debido a un push, necesita decirle a git que está bien con' --force' o ' -f' opción. Actualización de respuesta. –

7

El problema aquí es que desea deshacer los cambios que ya ha enviado al repositorio central. Si no los hubieras empujado en primer lugar, un reinicio de git --hard/- soft/- mixed HEAD^habría hecho el truco.

Así que cuando haya reiniciado su HEAD git se queja cuando intente presionar hacia el origen y actualice la referencia remota que no es un antecesor de su HEAD. Utilice --force:

git push --force origin master