2012-09-22 21 views
49

Ho un repository git con due rami, master e configurazioni non correlate. Ho creato le configurazioni, ho cancellato tutti i file e poi ho inserito solo nei file di configurazione. Ora voglio spingere questo sul repository remoto, ma come fosse nuovo, ramo vuoto (senza registri di tutte le mie modifiche e vecchie revisioni del ramo originale).Come inserire un nuovo ramo senza cronologia

Come posso eliminare tutta la cronologia e spingerla?

+3

Questo sembra molto simile: http://stackoverflow.com/questions/1384325/in-git-is-there-a-simple-way-of-introducing-an-unrelated-branch-to -a-repository – Mark

+0

@Mark grazie, fa quello che mi serve. – AoeAoe

risposta

100

L'eliminazione di tutti i file non elimina la cronologia. È necessario creare un ramo che non abbia cronologia prima e aggiungere i file di configurazione. In questi giorni git checkout ha un'opzione --orphan che crea un ramo senza cronologia. Ecco le informazioni sull'opzione --orphan:

--orphan < new_branch>

Creare un nuovo ramo orfano di nome < new_branch>, ha iniziato da < start_point> e passare ad esso. Il primo impegno fatto su questo nuovo ramo non avrà genitori e sarà la radice di una nuova storia totalmente disconnessa da tutti gli altri rami e commit.

L'indice e l'albero di lavoro sono regolati come se fosse stato precedentemente eseguito "git checkout < start_point>". Ciò consente di iniziare una nuova cronologia che registra un insieme di percorsi simili a < start_point> eseguendo facilmente "git commit -a" per rendere il commit di root.

Questo può essere utile quando si desidera pubblicare l'albero da un commit senza esporre la sua cronologia completa. Si potrebbe voler fare questo 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 si desidera avviare una cronologia disconnessa che registra un insieme di percorsi completamente diverso da quello di < start_point>, è necessario cancellare l'indice e l'albero di lavoro subito dopo aver creato il ramo orfano eseguendo "git rm -rf. " dal livello più alto dell'albero di lavoro. Successivamente sarete pronti per preparare i nuovi file, ripopolare l'albero di lavoro, copiandoli da altrove, l'estrazione di un archivio, ecc

Ecco un link alla documentazione per checkout. Puoi anche eseguire git help checkout.

Una volta creato il ramo senza cronologia, quando lo si invia al server, non avrà neanche quella cronologia. FWIW, mi aiuta a pensare a git push come "rendere il ramo remoto simile a quello locale". Quindi se hai una cronologia e premi, avrà una cronologia. Se non lo fai, allora il ramo spinto non lo farà.

13

Avevo bisogno di fare questo per inviare un codice freelancer senza condividere informazioni private o cancellare la mia cronologia.

Nel caso qualcuno di voi stia utilizzando SourceTree, questo è il modo in cui sono riuscito a farlo. Per favore fatemi sapere se ho fatto qualcosa di sbagliato o mi sto dimenticando di qualcosa in quanto sono molto poco familiare 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' utilizzando il comando: 'git checkout --orphan pulire-ver' dove pulito-ver è il mio nome ramo
  3. ho chiuso il terminale e ho visto che il mio log commettere è stata autorizzata perché ero in un nuovo ramo orfano. Ho messo in scena tutto il mio codice sorgente e ho effettuato i cambiamenti.
  4. Ho impostato il mio repository bitbucket in repository> aggiungi remoto o repository> impostazioni repository> aggiungi.
  5. L'ho chiuso e ho fatto clic sul pulsante
  6. Ho selezionato il mio nuovo ramo "clean-ver" detto ok.

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

Spero che questo aiuti qualcuno fuori.

11

Come posso eliminare tutta la cronologia e spingerla?

git checkout --orphan <name_you_choose_for_orphan_branch> 
git commit 

Quindi è possibile eseguire il

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


cf. this one-liner

Problemi correlati