2012-06-03 14 views
5

Ho lavorato a un repository privato per un po 'e sto per essere rilasciato su GitHub.Git - push al nuovo telecomando con un singolo commit consolidato

Il problema è che ho ricevuto molti commit e, per motivi di igiene, vorrei che fosse visualizzato un solo commit in GitHub.

Come si spinge senza inserire la cronologia? consolidare l'intero MASTER in un unico commit

molte grazie in anticipo.

Doug

risposta

1

sguardo nel git rebase. Modalità interattiva

5

Di solito si usa git rebase --interactive HEAD~n dove n è il n. di commit che vuoi unire in uno. Tuttavia, nel tuo caso vuoi schiacciare l'intera cronologia in un singolo commit e non è possibile ridistribuire senza un genitore (fino al commit iniziale), dobbiamo usare git reset e git commit --amend.

Ecco cosa dovete fare:

  1. git log --oneline. Trova lo SHA del tuo commit iniziale.
  2. Supponiamo che il nostro SHA sia fe7d5d1. Esegui git reset fe7d5d1. Questo resetterà il ramo al commit iniziale.
  3. Ora utilizzare git add . per mettere in scena tutte le modifiche.
  4. Modifica successiva del commit iniziale, git commit --amend -m "Initial commit".
  5. Confermare di disporre di un singolo commit ora con git log --oneline.

ATTENZIONE: Mai riscrivere/Squash/rebase impegna si è già spinto a un repo remoto.

+1

E se avessi spinto l'intera cronologia su un repository privato su bitbucket, ma voglio solo spingere lo stato corrente (cioè rebasato) su github? – Doug

+1

L'idea non è mai di riscrivere la cronologia che è già stata propagata ad altri. Nel tuo caso, se solo hai accesso al repository privato è sicuro rebase. –

+0

Non posso semplicemente riscrivere la cronologia per il repository GitHub e mantenere la cronologia per BitBucket? "Commetti" tutte le mie modifiche correnti come un singolo commit? – Doug

Problemi correlati