2010-03-05 13 views
6

Sfondo: Trevor stava lavorando a un progetto di prova esclusivamente allo scopo di provare git. Questo è un archivio da una sola persona locale che non è stato condiviso in modo da Trevor ha fatto un hard reset, al fine di cancellare alcuni commit indesiderati:Ramo anonimo dopo aver eseguito il reset git

:git reset --hard 6aa32cfecf4 
    HEAD is now at 6aa32cf auto commit Sun Feb 28 16:00:10 -0800 2010 

Poi Trevor andati insieme felicemente l'aggiunta di nuovi commit al progetto. Poi, quando Trevor ha esaminato la rappresentazione grafica della storia del commit, Trevor ha scoperto che sembra esserci un ramo anonimo dei commit annullati. Non si presenta come un ramo che usa il ramo git, ma appare nella GUI.

Domande 1: Come può Trevor sbarazzarsi di questo "ramo anonimo" ... e cosa sta guardando Trevor davvero? Quali sono alcune indicazioni per aiutare Trevor a capire cosa è successo quando Trevor ha fatto il difficile reset in modo che Trevor possa meglio impostare le aspettative di Trevor.

Domande 2: Assumendo Trevor avevano condiviso il progetto con altre persone. Quale sarebbe l'alternativa per fare lo stesso (o qualcosa di simile) senza fare un hard reset?

+1

Che cos'è uno swip? –

+0

@AndrewWillems Trevor – dreftymac

risposta

4

Come accennato in The illustrated guide to recovering lost commits with Git, è possibile recuperare "perso" si impegna (come in "non è più referenziato da una filiale o un tag").
Questo è il motivo per cui continuano a comparire in gitk.
Per esempio, una:

$ git fsck −−lost-found 

sarebbe anche visualizzarli.

Per Ripuliamolo (supponendo che avendo nulla di tornare da eventuali altre operazioni di cancellazione)

$ git gc --aggressive 
$ git prune 

Vedi anche git gc: cleaning up after yourself.


Se quel ramo fosse stato condiviso, una possibile alternativa sarebbe stata un git revert al fine di fare un nuovo commit annullare le precedenti n.

3

È possibile creare un nuovo ramo con un commit.

Se il tuo ultimo commit nel ramo anonimo è 123e43 si può fare:

git checkout -b my_branch 123e43e

Ora la filiale non è anonima. Puoi unirli o rebase nel tuo ramo principale

Problemi correlati