Nota al margen: puede que le resulte útil git fetch upstreamprimero, luego eche un vistazo rápido git diff upstream/branchpara ver en qué se fusionará. Si todo está bien, continúe congit merge upstream/branch
Shahbaz
1
Perderá toda su credibilidad en la calle y recibirá una paga de una semana si algún programador hipster lo ve hacer comandos git desde una GUI, pero tanto GitHub Desktop como Atom tienen botones seguros y directos para undoconfirmar y casillas de verificación para organizar y eliminar archivos de manera fácil y clara. ¡Las GUI también son personas!
Dem Pilafian
Respuestas:
391
O para hacerlo más explícito que la otra respuesta:
git pull
whoops?
git reset --keep HEAD@{1}
Las versiones de git anteriores a 1.7.1 no tienen --keep. Si usa dicha versión, podría usarla --hard, pero es una operación peligrosa porque pierde cualquier cambio local.
ORIG_HEAD es el estado anterior de HEAD, establecido por comandos que tienen un comportamiento posiblemente peligroso, para que sea fácil revertirlos. Es menos útil ahora que Git tiene reflog: HEAD @ {1} es aproximadamente equivalente a ORIG_HEAD (HEAD @ {1} siempre es el último valor de HEAD, ORIG_HEAD es el último valor de HEAD antes de una operación peligrosa)
@hugemeow Esa sería una buena pregunta SO. Mientras tanto man git-rev-parsedescribe esto. HEAD@{1}es el valor anterior de simbólico HEADen el reflogmientras que HEAD^es la (primera) revisión principal de la actual HEAD. Estos dos deben ser equivalentes (por ejemplo, después de un rebase, un restablecimiento completo, un cambio de rama y esas cosas). Lea el artículo vinculado para reflog. Saludos
sehe
10
Usuarios de PowerShell, escapen de los corchetes con un backtick:git reset HEAD@`{1`}
Creo que no solo restablece la extracción, sino también mis commits = (
falsarella
67
git reflog showdebería mostrarte la historia de HEAD. Puedes usar eso para descubrir dónde estabas antes del pull. Entonces puedes resettu HEADa ese compromiso.
git reflog show dio este resultado: c9e5e4d HEAD @ {0}: pull: avance rápido 1c86a22 HEAD @ {1}: pull origin master: avance rápido 05c141a HEAD @ {2}: pull: avance rápido ¿Puedo restablecer el HEAD a HEAD de manera segura? @ {1}
Kartins
La otra respuesta de sehe tiene detalles sobre cómo llegar allí.
Noufal Ibrahim
Esto fue súper útil después de que una confirmación desastrosa de alguna manera interfiriera en mi historia. Los saqué buscando un último bien conocido en el registro y luego forcé a empujar.
Domenic
¿Qué pasa si pulles la primera acción? Si pullestá en HEAD@{1}, y nada más antes de eso, ¿cómo volver a un estado anterior?
Hendra Uzia
Recrea el repositorio?
Noufal Ibrahim
29
Esto funcionó para mí.
git reset --hard ORIG_HEAD
Deshacer una fusión o extracción:
$ git pull (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard (2)
$ git pull . topic/branch (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD (4)
Encuentra el <SHA#>compromiso para el que quieres ir. Puede encontrarlo en github o escribiendo git logo git reflog showen la línea de comando y luego hacer
git reset --hard <SHA#>
Incluso si puede tener modificaciones locales en su árbol de trabajo, puede decir con seguridad git pullcuando sepa que el cambio en la otra rama no se superpone con ellas.
Después de inspeccionar el resultado de la fusión, es posible que el cambio en la otra rama no sea satisfactorio. La ejecución git reset --hard ORIG_HEAD
le permitirá volver a donde estaba, pero descartará los cambios locales que no desea. git reset --mergemantiene tus cambios locales.
git fetch upstream
primero, luego eche un vistazo rápidogit diff upstream/branch
para ver en qué se fusionará. Si todo está bien, continúe congit merge upstream/branch
undo
confirmar y casillas de verificación para organizar y eliminar archivos de manera fácil y clara. ¡Las GUI también son personas!Respuestas:
O para hacerlo más explícito que la otra respuesta:
whoops?
Las versiones de git anteriores a 1.7.1 no tienen
--keep
. Si usa dicha versión, podría usarla--hard
, pero es una operación peligrosa porque pierde cualquier cambio local.Al comentarista
fuente
man git-rev-parse
describe esto.HEAD@{1}
es el valor anterior de simbólicoHEAD
en elreflog
mientras queHEAD^
es la (primera) revisión principal de la actualHEAD
. Estos dos deben ser equivalentes (por ejemplo, después de un rebase, un restablecimiento completo, un cambio de rama y esas cosas). Lea el artículo vinculado para reflog. Saludosgit reset HEAD@`{1`}
HEAD@`{1`}
, o incluso hacer lo que funciona en shells POSIX:'HEAD@{1}'
git reflog show
debería mostrarte la historia de HEAD. Puedes usar eso para descubrir dónde estabas antes delpull
. Entonces puedesreset
tuHEAD
a ese compromiso.fuente
pull
es la primera acción? Sipull
está enHEAD@{1}
, y nada más antes de eso, ¿cómo volver a un estado anterior?Esto funcionó para mí.
Deshacer una fusión o extracción:
Mira esto: HEAD y ORIG_HEAD en Git para más.
fuente
Encuentra el
<SHA#>
compromiso para el que quieres ir. Puede encontrarlo en github o escribiendogit log
ogit reflog show
en la línea de comando y luego hacergit reset --hard <SHA#>
fuente
<SHA#>
Desde https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree
Ver también https://stackoverflow.com/a/30345382/621690
fuente