2011-05-18 14 views
34

No estaba actualmente en ninguna sucursal cuando realicé mis cambios. Realmente no noté el mensaje y revisé otra rama.Actualmente no está en ninguna rama + commit de Git + pago cuando no está en ninguna rama. Perdí mis cambios?

¿Cómo puedo recuperar mis cambios? No puedo fusionar o finalizar la compra, ya que no hay ninguna rama de la que fusionarse.

+0

¿Todavía tiene la salida de la consola de cuando comprometida? ¿Contenía el SHA1 de la confirmación? Si es así, tiene el objeto de confirmación, que es todo lo que necesita – rlc

+3

Yo ... no sabía que podría * no * estar en una sucursal ... –

+3

@Ignacio El caso más común de no estar en una sucursal es cuando pagas una comisión que no es de la punta de una sucursal – CharlesB

Respuesta

67

Puede utilizar git reflog para obtener el hash de una confirmación de que lo hizo mientras que en "ninguna rama" (una cabeza separada) y fusionar de que en la rama que usted está actualmente en (maestro tal vez)

comprometen Algo así como git merge [email protected]{1}

También puede git rebase -i y "elegir" la confirmación que desea del reflog.

+1

git cherry-pick {hash} también parece funcionar –

2

Su confirmación no ha desaparecido, puede recuperar pidiéndole a git que le muestre las confirmaciones ocultas y las vuelva a colocar en una sucursal temporal.

Consulte this answer para obtener instrucciones.

+2

Es más fácil que eso en este caso, ya que el reflog tendrá la confirmación - [la respuesta de manojlds] (http://stackoverflow.com/questions/6048425/not-currently-on-any-branch-git-commit-checkout- when-not-in-any-branch-did-i/6048609 # 6048609) describe eso. –

+0

Lo votó con respeto – CharlesB

-5

Nunca "no está en ninguna rama". Es posible que haya estado en la rama llamada master, pero ESTABA en una sucursal cuando cometió. Entonces ese compromiso es EN ALGÚN LUGAR.

Utilice git log para ver la historia. Puede usar git reset para retroceder en el tiempo (incluido, opcionalmente, dejar los cambios en su directorio de trabajo).

+12

Esto está mal - usted * no puede * estar en una sucursal. Este estado se conoce como "HEAD separado" porque "HEAD" apunta al hash de un commit en particular en lugar de a un nombre de rama. Cualquier confirmación que realice con HEAD desconectado no avanzará una sugerencia de rama, pero seguirá siendo accesible durante un tiempo a través del reflog. –

+0

No es cierto. En este momento, el "estado $ git" me da "# Actualmente no está en ninguna rama". (en lugar del habitual "# On branch master"), seguido de "# Changes to be commit:" etc. – weronika

1

Usar "git reflog" muestra los hashes de confirmación de los resultados del historial de comandos de git. Luego puede "git co hash" y cuando encuentre el correcto, configure/cree una rama para él.

11

yo estaba en un estado similar después de haber cometido algún trabajo:

Lilith: Gestor KelSolaar $ git status

no está actualmente en cualquiera de las ramas.

I emitió un idiota ingrese para ver mi último hash de comprometerse:

Lilith: Gestor KelSolaar $ git log

cometer 49984303037e970d637161c3154b7fd7d6ae3a43 Autor: KelSolaar Fecha: Mar Nov 5 22 de : 41: 31 2011 +0100

Introduce new "QObject" components category and rename existing ones to "Def 

luego he comprobado mi rama principal:

Lilith: Gestor KelSolaar $ git checkout master

posición de la cabeza anterior era 4998430 ... Introducir nuevos componentes "QObject" categoría y cambiar el nombre de los exising a " Predeterminado "y" QWidget ".

conmutada en rama 'master'

Y finalmente se fusionaron utilizando el hash se comprometen:

Lilith: Gestor KelSolaar $ git fusionar 49984303037e970d637161

Actualización 141bc69..4998430

Avance rápido

src/manager/component.py | 2 + -

...

8

git checkout - se conmutará de vuelta a la rama anterior:

Thu Feb 21 12:50 AM /src/test ((08f84f4...)) $ git checkout master 

Warning: you are leaving 1 commit behind, not connected to 
any of your branches: 

    08f84f4 Fix everything 

Switched to branch 'master' 

Thu Feb 21 12:50 AM /src/test (master) $ git checkout - 

HEAD is now at 08f84f4... Fix everything 

Thu Feb 21 12:50 AM /src/test ((08f84f4...)) $ 
+1

Creo que esta es la mejor respuesta. También vale la pena mencionar que puede verificar su sucursal actual usando 'git branch' –

+0

Esto responde la pregunta con la solución más simple. 'git checkout -' (solo para resaltarlo de nuevo) – N8TRO

Cuestiones relacionadas