¿Por qué tengo que "presionar" cuando reinicie mi repository hasta el último compromiso?

Me he estado poniendo al día con Git (muy satisfecho con esto hasta ahora) pero todavía estoy un poco confundido acerca de un par de cosas. Estoy usando SourceTree en una Mac.

En particular, mi equipo y yo habíamos estado haciendo cambios, comprometiéndolos y luego presionando a nuestro remoto repository remoto que vivía en mi server Linux. Por separado, he estado haciendo algunos experimentos en mi computadora portátil y terminé con algunos cambios locales divergentes.

En lugar de intentar fusionarlos, decidí que realmente quería volver mi computadora portátil al estado del repository remoto. Intenté eliminar los cambios del repository remoto y, después de que me advirtieron que tendría que fusionarme, decidí revertir ("reiniciar", supongo, en el lenguaje GIT) a la última confirmación oficial. Hice esto para todo y pude bajar los files.

Sin embargo, SourceTree me dijo que hubo 24 cambios que tuve que devolver al server remoto, pero no pude ver cuáles eran esos cambios (particularmente porque mi objective era no tener nada que save). Eso me puso muy nervioso.

En última instancia, simplemente volé toda la carpeta (incluido el .git) y simplemente cloné el repository remoto nuevamente.

La desventaja de esto último es que si tienes nuevos files sin seguimiento, se eliminarán si no restrings copyrlos temporalmente en otro lugar.

Mi pregunta es si hay alguna manera de simplemente revertir mi copy de trabajo local (y el contenido .git) a lo que sea el estado más reciente del repository remoto, dejando intactos los files sin seguimiento en la copy de trabajo.

Encontré ¿ Por qué tengo que presionar los cambios que acabo de sacar de origen en Git? pero realmente no responde ninguno de los problemas que describo aquí.

Gracias de antemano por cualquier idea.

re

Creo que lo que estás buscando es git reset --hard origin/master , suponiendo que el origin es tu control remoto y master es tu sucursal.

Advertencia : esto eliminará cualquier file modificado que tengas, pero no debería afectar los files sin seguimiento.

Puede usar git checkout para restablecer los files de tree de trabajo individuales a su aspecto en el índice (en HEAD o en cualquier revisión o twig específica).

Tenga en count que el significado de pago y envío en git es muy diferente de lo que significa en otros sistemas SCM. Significa "mirarlo", no "bloquearlo para otros hasta que lo vuelva a registrar".

No sé lo suficiente de los detalles de su recuperación de git pull & git que realizó para comprender por qué git dijo que hubo 24 cambios que tuvo que rechazar. Probablemente sea demasiado tarde para volver a crear los commands y errores exactos que ocurrieron, pero probablemente podríamos decodificar lo que sucedió con esa información.

Si en el futuro tiene la misma situación en la que sus cambios locales divergieron del repository remoto, recomendaría un flujo de trabajo de Git ligeramente diferente. Primero comienza con

git fetch

Esto recuperará cualquier nueva confirmación y actualizará la twig remota de origen / maestro junto con otras twigs remotas, pero a diferencia de la git pull , no cambiará ninguna de sus twigs locales, ni siquiera la maestra.

Ahora, si desea save sus cambios locales divergentes para su uso futuro, obtenga una nueva sucursal tópica,

git checkout -b my_feature

Ahora que tiene un puntero de bifurcación en su trabajo local divergente, puede restablecer su puntero de bifurcación principal sin preocuparse por perder su trabajo. Primero, cambie a su twig principal (que debe estar en la misma confirmación que my_feature)

git checkout master

Y ahora restablecer eso al origen / maestro,

git reset --hard origin/master

Ahora su trabajo anterior se guarda en my_feature , mientras que su twig master vuelve a coincidir con el repository remoto.

Para ahorrarse este problema en el futuro, recomiendo siempre trabajar en una twig tópica. De esta forma, puedes git pull maestría sin preocuparte por tu trabajo local. Y cuando llegue el momento de compartir su trabajo con el mundo, puede rebase la rebase su twig para dominar antes de pulsar, y nadie más tendrá que saber siquiera sobre su sucursal local.

Soy un gran admirador del libro Pro Git, que está disponible en línea. Aquí está su capítulo sobre rebase .