Come resettare un repository Git remoto per rimuovere tutti i commit?


164

Come posso resettare un repository Git remoto e locale per rimuovere tutti i commit?

Vorrei ricominciare da capo con l'attuale Head come commit iniziale.



Non voglio scegliere né fare altro, voglio solo rimuovere tutte le modifiche e ripristinare anche il repository pubblico. Dato che sono un nuovo utente di Git, ho commesso alcuni errori. La rimozione della directory .GIT non è un'opzione in quanto esiste anche un repository pubblico.
Priyank Bolia,

Puoi anche fare una spinta forzata, quindi rimuovere la directory .git è in realtà un'opzione.
Lilith River,

2
solo il nitpicking, ma "revisione" è una terminologia svn e non ha molto senso in una storia a forma di albero.
Tamás Szelei,

2
@ TamásSzelei "Revision" è un sinonimo perfettamente accettabile di "commit". È usato sia nel libro Pro Git (ad es. Qui ) che nelle pagine man di Git.
jub0bs

Risposte:


348

Completamente resettato?

  1. Elimina la .gitdirectory localmente.

  2. Ricrea il repostory git:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Invia al server remoto, sovrascrittura. Ricorda che sbaglierai tutti gli altri facendo questo ... faresti meglio ad essere l'unico cliente.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    

1
ma i commit sono spariti e il repository viene ripristinato. Possiamo rimuovere quei messaggi precedenti anche davanti ai nomi dei file.
Priyank Bolia,

2
Rimuovere il repository remoto direttamente su GitHub e ricrearlo lì.
Bombe

1
Dovrebbe essere git push
force

6
Se non desideri eseguire il commit di alcun file nel tuo "commit iniziale", non puoi semplicemente aggiungere alcun file e aggiungere il --allow-emptyflag alla fine di git commit -m 'Initial commit'.
raf

2
Usando Git 2.3.2, ho dovuto usare git push --force --set-upstream origin masterMa tutto il resto funzionava come descritto
Sébastien Stormacq

6

Innanzitutto, segui le istruzioni in questa domanda per comprimere tutto in un unico commit. Quindi fai una spinta forzata al telecomando:

$ git push origin +master

E facoltativamente elimina tutte le altre filiali sia localmente che da remoto:

$ git push origin :<branch>
$ git branch -d <branch>

0

Se fossi in te farei una cosa del genere:

Prima di fare qualsiasi cosa, ti preghiamo di conservarne una copia (meglio prevenire che curare)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

Dopo averlo fatto, puoi eliminare altri rami.

Risultato: avrai una filiale con solo 2 commit.

Usa git log --onelineper vedere i tuoi commit in modo minimalista e per trovare SHA-1 per commit!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.