È possibile svuotare completamente remoto repository Git?

Diciamo che faccio un errore nel mio primo push a un remoto repository Git. Posso in qualche modo ripristinare questo in modo che il repository è di nuovo al suo stato iniziale? Non ho accesso al computer remoto, in modo da eliminare .git directory non è possibile.

Il problema, per quanto posso vedere è che non si può “unset” in testa.

Questo è quello che ho (o, addirittura, di un collega che ha chiesto informazioni su questo) fatto (faccio un locale “remoto” repo qui in modo che chiunque può verificare questo):

mkdir git-remote
cd git-remote
git init --bare
cd ..
mkdir git-local
cd git-local
git clone ../git-remote .
touch a
git add a
git commit -m "initial"
git push origin master

E a questo punto si rese conto che avrebbe spinto la roba sbagliata al repository remoto.

L’unica idea che ho avuto è elimina tutto dalla sua repo && git rm && git push che sarebbe ancora difettoso commettere, ma il file non preoccuparsi di un secondo push.

InformationsquelleAutor Makis | 2011-02-07



2 Replies
  1. 67

    Penso che si potrebbe avere un XY problema. Non avete davvero bisogno di ottenere il repository remoto nel suo stato originale per ricominciare; è sufficiente ricominciare in locale, quindi la forza di spinta che remoto.

    # create a new repository that has the initial commit that you want
    mkdir foo; cd foo; git init; ...; git commit
    
    # set up a remote
    git remote add origin <url-of-remote>
    git branch --set-upstream master origin/master
    
    # push your new history
    git push -f
    
    # delete obsolete remote branches
    git push origin :deprecated-branch
    

    Repository remoto non restituisce nessun-si impegna a stato, ma finisce dove vuoi, e questo è ciò che conta!

    (Sotto il cofano, il vecchio si impegna, in realtà, continuano nel repository remoto, ma si è lasciato penzoloni, senza riferimenti indicando loro. Essi saranno rimossi automaticamente quando git gc --auto è innescato da una spinta a un certo punto.)

    Se si vuole veramente vuoto per qualche motivo, è possibile impostare receive.denyDeleteCurrent nel repository remoto, e push-eliminare tutti i settori, compreso quello attuale. Non vedo perché devi effettivamente, però!

    • Perché avete bisogno di la -f bandiera terzo comando?
    • significa --force. È necessario per la non-fast-forward spinge (spingendo in rami che non hanno la posizione precedente del ramo come un antenato).
    • Dal --set-upstream è deprecato, git branch --set-upstream-to=origin/master master fa il lavoro ora (configurazione remota)
    • git push --mirror --force , inoltre, dovrebbe funzionare
  2. 0

    È possibile git revert si impegna, ad esempio,git revert HEAD.

    Tenere a mente che il contenuto si impegna risiedono nel .git directory. (Non è possibile fare nulla di che)

    È impossibile in realtà eliminare un commit dalla storia, senza dover accedere al .git directory.

    • Quindi la risposta è “no”, quindi.
    • Questa risposta non è corretta. È possibile eliminare i rami sul telecomando, e forza il ramo master fin dalla sua prima impegnarsi. È vero che non la si può lasciare senza alcun impegna a tutti, ma è possibile sostituire la radice di commit. L’originale commette sarà lasciato a penzoloni, e, infine, ripulito da git gc --auto, che viene eseguito automaticamente ora e poi.
    • Jonas, git comandi (tra cui spinta) lavoro accedendo e, eventualmente, modificare il contenuto dei .git directory. È non hanno accesso al telecomando .git directory attraverso git push. È indiretta e incompleto, ma è anche sufficiente per questo compito.

Lascia un commento