¿Qué tan mal mangue mi git repo?

Mi proyecto tiene una configuration de repo al descubierto en el server. Actualmente estoy en la twig 0.9/develop . Me fusioné 0.9/develop con una twig en la que otro desarrollador estaba trabajando. Resulta que sería mucho más trabajo arreglar su código que borrar por completo sus cambios. Desafortunadamente, ya ejecuté un git push origin 0.9/develop después de haber cometido la fusión Y saqué esos cambios a mis serveres de desarrollo Y de preparación (sí, soy estúpido).

He estado pasando por un montón de preguntas similares en SO, pero ninguno parece cubrir mi caso exacto. Este fue particularmente útil: ¿Cómo revertir el repository de Git a una confirmación previa?

Utilizando la información de esa pregunta, pude borrar con éxito el último compromiso fuera del proyecto. Específicamente, hice un git reset --hard f6c84a0 , que restableció con éxito mi repository local a la confirmación justo antes de fusionar el n00bery del otro desarrollador en mi poesía.

Bien, excelente. Ahora solo necesito arreglar el repo al descubierto. Así que probé git push --force origin 0.9/develop . Desafortunadamente, perdí el post específico que envió el server, pero fue algo así como "éxito", y mostró que el repository remoto se había actualizado para confirmar f6c84a0.

Cuando intenté ingresar al server y luego ir a mi entorno de testing y ejecutar un git pull , la respuesta fue:

 From /home/ben/web/example + 77d54e4...f6c84a0 0.9/develop -> origin/0.9/develop (forced update) Already up-to-date. 

Sin embargo, cuando ejecuté un git log desde el server de transición, todas las confirmaciones de la combinación todavía están en la twig 0.9/develop . Intenté un par de cosas, como git pull --force , pero no pude get los malos compromisos para irme.

Bien vale. Hay más de una manera de despellejar a un gato. Limpié el server de preparación e hice un nuevo git clone --recursive --no-hardlinks example.git stage.example.com y ejecuté el guión de configuration necesario que hace algunas cosas pequeñas de mantenimiento del server.

Ahora no puedo volver a mi 0.9/develop branch . En el pasado, simplemente he ejecutado git checkout 0.9/develop , pero si lo bash ahora, obtengo esto:

 Branch 0.9/develop set up to track remote branch 0.9/develop from origin. Switched to a new branch '0.9/develop' 

¿Esperar lo? 0.9/develop no es una nueva twig. Trabajando con información de esta pregunta: ¿Cómo clonar todas las sucursales remotas en Git? Hice una git branch -a y obtuve lo siguiente:

 * 0.9/develop master remotes/origin/0.8/develop remotes/origin/0.8/master remotes/origin/0.9/develop remotes/origin/HEAD -> origin/master remotes/origin/category-address remotes/origin/jaminimaj remotes/origin/master remotes/origin/permissions remotes/origin/ticket-duration remotes/origin/timzone-support 

Luego probé git checkout origin/0.9/develop , pero recibí el siguiente post:

 Note: checking out 'origin/0.9/develop'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at f6c84a0... bugfix: revert email helper 

Bueno, la buena noticia es que el server de transición ahora tiene la base de código adecuada, pero estoy en un estado HEAD aislado. Me doy count de que probablemente me esté perdiendo algo muy poco importante aquí, pero ciertamente está jugando con mi viernes por la noche. ¿Cómo puedo hacer que mi server de ensayo HEAD vuelva a señalar HEAD of 0.9/develop ? Además, quiero hacer lo mismo en mi entorno de desarrollo, pero prefiero hacerlo de la manera correcta que borrar todo el server y comenzar de nuevo. ¿Puedo hacer eso o tendré que usar fuerza bruta para rebuild el server del repository? ¡Gracias a todos por la ayuda!

El post

 Branch 0.9/develop set up to track remote branch 0.9/develop from origin. Switched to a new branch '0.9/develop' 

significa lo siguiente:

  • git creó un nuevo puntero de twig llamado 0.9 / develop que apunta al actual jefe de origen / 0.9 / develop
  • Este puntero de bifurcación tiene configuraciones de configuration generadas automáticamente para rastrear la sucursal remota para que git pull y git push funcionen como se espera.

Entonces hace lo que se supone que debe hacer. Es un poco contra-intuitivo, básicamente para trabajar con una sucursal necesita una sucursal local en el repository que clonó. Esto se fusiona con la twig remota cada vez que ejecutas git pull .

Por cierto, git pull en la twig de seguimiento es equivalente a

 git fetch git merge remotes/origin/0.9/develop 

Parece que necesita verificar la sucursal en el repository desnudo y utilizar git reset para restablecerlo de nuevo a donde lo desee. Alternativamente, puede git reset la sucursal local en su repository local y git push -f . En el repository por etapas, debes hacer un git reset como lo haces en tu repository normal de trabajo.

Posiblemente su problema de raíz se responde aquí

Después de la manipulación como su cliente, el cliente debe reiniciar algunas confirmaciones y volver a tirar, ya que su repository está por delante del impulso forzado.

Si te encuentras despreocupado, no te preocupes solo checkout un checkout una sucursal local . Sucede fácilmente si utiliza el pago en un hash directo, una label o una twig remota, o simplemente se encuentra en el medio de alguna operación. Simplemente significa que no estás en ninguna twig actualmente.

Lo tienes por

 git checkout origin/0.9/develop 

No está claro si perdió sus sucursales locales o no. use git branch para ver si tiene 0.9/develop o no, y si es así, busque eso. De lo contrario, inicie git gui y use crear el menu de bifurcación para crearlo desde la twig de seguimiento.