2014-10-26 15 views
5

Uno dei nostri ragazzi ha spinto un commit che sembra essere completo e funziona sul suo computer. Da allora, nessuno degli altri computer è in grado di recuperare le modifiche dal repository remoto. L'errore che ognuno sta ottenendo è:Git non può recuperare a causa di un commit corrotto

git.exe fetch -v --progress "origin" 

POST git-upload-pack (gzip 1407 to 775 bytes) 
remote: error: Could not read a75720ce47ae8dcc1d0b4c09fcb7d6f70efa390b 
remote: fatal: revision walk setup failed 
remote: aborting due to possible repository corruption on the remote side. 
fatal: protocol error: bad pack header 
git did not exit cleanly (exit code 128) (14368 ms @ 26/10/2014 11:49:05) 

L'SHA (a75720 ...) che non può essere letto sono il CSA di dette commesso.

Abbiamo provato varie cose, ma niente sembra funzionare. L'esecuzione di git fsck non mostra il commit come penzolante, e nel server remoto, nessun ramo punta al commit.

Il ripristino dei dati dal commit non è una priorità, ma è necessario riavviare il sistema.

Qualche suggerimento su come eliminare/correggere il commit interrotto? L'aiuto sarebbe molto apprezzato.

Grazie!

+0

Per essere chiari, è stato eseguito 'git fsck' sul telecomando e non ha riscontrato problemi? –

risposta

1

Nel computer locale è possibile rebase del master al commit prima di a75720.

Rollback to an old Git commit in a public repo

allora si può fare un cherry-pick per gli altri si impegna. (Si può spicify un elenco di commit)

How to cherry-pick multiple commits

Poi, se tutto sembra funzionare, è necessario fare una spinta forza.

git push --force origine desiredBranch

(specificare il ramo desiderato !!)

da: http://git-scm.com/docs/git-push

--force Di solito, il comando si rifiuta per aggiornare un ref remoto che non è un antenato del ref locale usato per sovrascriverlo. Inoltre, quando viene utilizzata l'opzione di tipo force-with-lease , il comando rifiuta di aggiornare un riferimento remoto il cui valore corrente non corrisponde a quanto previsto.

Questo flag disabilita questi controlli e può causare l'eliminazione dei commit da parte del repository remoto ; usalo con cura

noti che --force applica a tutti gli arbitri che vengono spinti, quindi utilizzando con push.default impostato corrispondenza o con più spinta destinazioni configurate con telecomando. *. Spinta può sovrascrivere arbitri altro quello attuale ramo (compresi i ref locali che sono rigorosamente dietro loro controparte remota). Per forzare una spinta verso un solo ramo, usare un + davanti al refspec per spingere (ad esempio, git push origin + master per forzare una spinta al ramo principale). Vedere la sezione ... sopra per i dettagli di .

Problemi correlati