¿Por qué mi origen git desea eliminar todos mis cambios push?

Después de pensar que finalmente me di count de que me había matado, ahora me encuentro muy confundido sobre el comportamiento de un git que estoy viendo: cada vez que presiono cambios realizados y me comprometo a mi máquina local hasta mi repository git de origen, esos cambios se ponen inmediatamente puesta en escena para ser deshecha en el server de origen. Huh?!?

Tengo una máquina (máquina A) con un repository git para un proyecto; esa máquina está ejecutando un server SSH, y configuré una count para poder conectarme a ella de forma remota y clonar el git repo. Luego usé git en la máquina B para clonar el repository:

git clone ssh://username@remote.host/path/to/repo

sin problemas. Realicé cambios en el proyecto en la máquina B y comprometí esos cambios en el repository de git en B. Luego, volví a enviar los cambios al repository de origen en la máquina A:

git push master origin

y eso funcionó bien; en la máquina B, la salida de git remote show origin muestra que el origen está actualizado:

 $ git remote show origin * remote origin Fetch URL: ssh://username@remote.host/path/to/repo Push URL: ssh://username@remote.host/path/to/repo HEAD branch: master Remote branch: master tracked Local ref configunetworking for 'git push': master pushes to master (up to date) 

Pero cuando voy a la máquina A y hago un git status , veo que todos los cambios que acabo de hacer ahora están listos para deshacerse.

 $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: build-fatjar.xml # deleted: src/monitor/config/client-lm-prod.xml # modified: src/monitor/config/quartz-baseconfig.xml # modified: src/monitor/service/task/BaseTask.java # new file: src/monitor/service/task/CheckForCorrections.java # deleted: src/monitor/service/task/CheckForDuplicates.java # deleted: src/monitor/service/task/ProcessCorrections.java # renamed: src/monitor/test/CheckForDuplicatesTest.java -> src/monitor/test/CheckForCorrectionsTest.java # deleted: src/monitor/test/ProcessCorrectionsTest.java # modified: src/monitor/test/TaskTestCase.java 

La única forma de get el repository de origen (máquina A) en el mismo estado que el de la máquina B es git reset HEAD para reiniciar todos los cambios por cometer y luego git rm cada uno de ellos; de lo contrario, la próxima git commit en la máquina A deshará todo lo que acaba de pasar de la máquina B.

He leído todas las references que puedo tener en mis manos y ninguna menciona este comportamiento; Del mismo modo, tampoco puedo encontrar una reference en línea. ¿Algunas ideas?

Suena como si estuvieras presionando para un repository no vacío (es decir, un repository que tiene files revisados ​​en el disco). Git actualizará el repository, pero no los files extraídos, por lo que parecerá que hay cambios a la espera de ser organizados. La solución es hacer una de dos cosas:

  1. O ingrese en un repository (origen) desnudo y luego use un gancho posterior a la recepción para verificar los files (quizás usando el git archive ) a otro lugar en el server, o
  2. Use un gancho posterior a la recepción para ejecutar el process de git checkout o para actualizar los files en el disco.

Puede leer más en esta pregunta sobre desbordamiento de stack o en este artículo de cómo hacerlo .

Sí @MvanGeest tiene razón, usted está presionando para un repository no descubierto. Si tiene la intención de utilizar un repository como un "repository bendecido", es decir, de la misma manera que usaría un repository principal en subversión, entonces necesita crear un repository simple y pulsarlo. si en la situación que tienes ahora, tienes que entrar y salir de b.