Come spingere un nuovo ramo senza storia


93

Ho un repository git con due rami non correlati, master e configurazioni. Ho creato configurazioni, eliminato tutti i file e quindi inserito solo nei file di configurazione. Ora voglio spingerlo sul repository remoto, ma come se fosse nuovo, ramo vuoto (senza i registri di tutte le mie modifiche e le vecchie revisioni del ramo originale).

Come posso eliminare tutta la cronologia e spingerla?



Risposte:


155

L'eliminazione di tutti i file non elimina la cronologia. Devi prima creare un ramo che non ha cronologia e aggiungere i tuoi file di configurazione. In questi giorni git checkoutha --orphanun'opzione che fa un ramo senza storia. Ecco le informazioni --orphansull'opzione:

--orphan <new_branch>

Crea un nuovo ramo orfano, denominato <new_branch>, avviato da <start_point> e passa ad esso. Il primo commit fatto su questo nuovo ramo non avrà genitori e sarà la radice di una nuova storia totalmente scollegata da tutti gli altri rami e commit.

L'indice e l'albero di lavoro vengono regolati come se avessi eseguito in precedenza "git checkout <start_point>". Ciò consente di avviare una nuova cronologia che registra un insieme di percorsi simili a <start_point> eseguendo facilmente "git commit -a" per eseguire il commit di root.

Ciò può essere utile quando si desidera pubblicare l'albero da un commit senza esporre la sua cronologia completa. Si potrebbe desiderare di farlo per pubblicare un ramo open source di un progetto il cui albero corrente è "pulito", ma la cui cronologia completa contiene bit di codice proprietari o altrimenti ingombranti.

Se vuoi avviare una cronologia disconnessa che registra un insieme di percorsi totalmente diverso da quello di <start_point>, allora dovresti cancellare l'indice e l'albero di lavoro subito dopo aver creato il ramo orfano eseguendo "git rm -rf. " dal livello superiore dell'albero di lavoro. Successivamente sarai pronto per preparare i tuoi nuovi file, ripopolando l'albero di lavoro, copiandoli altrove, estraendo un tarball, ecc.

Ecco un collegamento alla documentazione per il checkout . Puoi anche correre git help checkout.

Una volta che hai creato il tuo ramo senza cronologia, quando lo invii al server, non avrà nemmeno quella cronologia. FWIW, mi aiuta a pensare git pushcome "rendere il ramo remoto uguale a quello locale". Quindi, se hai la storia e spingi, avrà la storia. Se non lo fai, il ramo spinto non lo farà.


36

Come posso eliminare tutta la cronologia e spingerla?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Quindi puoi eseguire il tuo file

git push <remote-name> <branch-name>


cfr. questo one-liner


16

Dovevo farlo per inviare un codice a un libero professionista senza condividere informazioni private o eliminare la mia cronologia.

Nel caso in cui qualcuno di voi stia usando SourceTree, è così che sono riuscito a farlo. Per favore fatemi sapere se ho fatto qualcosa di sbagliato o sto dimenticando qualcosa perché non ho familiarità con la gestione del controllo del codice sorgente.

  1. Sono andato al pulsante del terminale sull'albero dei sorgenti.
  2. Ho creato un nuovo ramo 'orfano' usando il comando: 'git checkout --orphan clean-ver' dove clean-ver è il nome del mio ramo
  3. Ho chiuso il terminale e ho visto che il mio log di commit è stato cancellato perché mi trovavo in un nuovo ramo orfano. Ho messo in scena tutto il mio codice sorgente e ho eseguito il commit delle modifiche.
  4. Ho configurato il mio repository bitbucket in repository> aggiungi remoto o repository> impostazioni repository> aggiungi.
  5. L'ho chiuso e ho cliccato sul pulsante
  6. Ho selezionato il mio nuovo ramo "clean-ver" e ho detto ok.

Quando ho controllato bitbucket, sembra che questo abbia funzionato e abbia scartato la mia cronologia di commit.

Spero che questo aiuti qualcuno.

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.