2012-12-02 25 views
5

Ho un repository git locale, un repository remoto. Ho fatto 5 commit al repository locale dall'ultima estrazione da remoto.git, lo schiacciamento si impegna al volo

Ora ho bisogno di spingere al telecomando. E ho bisogno di schiacciare i miei ultimi 5 commit.

posso farlo da git rebase -i HEAD~5

Ma non è buona. Non voglio cambiare nulla nel mio repository locale. Voglio spingere un commit schiacciato a distanza e lasciare 5 commit invariati nel mio repository locale.

Qualche idea?

UPD: cosa succede se ho il mio repo locale con 5 commit. e ho bisogno di creare un nuovo repository remoto per condividere il mio codice con gli altri. Come schiacciare i commit per questo nuovo repo?

risposta

1

leggera variazione da Titas s' answer, senza toccare il ramo master, e schiacciamento su un nuovo ramo (che si dovrebbe spingere al nuovo pronti contro termine)

git remote add newrepo url://of/your/new/repo 
git checkout -b newbranch master 
git merge --squash master 
git push -u newrepo newbranch:master 

Ma sarebbe spingere la storia completa del maestro , +1 (schiacciato) commit, sul tuo nuovo repository.

Se si voleva un ramo nuova storia, con il pronti contro termine come dopo le 5 nuove commit, è più facile:

  • clone localmente tuo repo,
  • rimuovere il .git in quel clone locali,
  • git init. (vale a dire, ri-creare un nuovo repository git locale da tutti i file esistenti),
  • aggiungere tutto e fare un commit,
  • aggiungere il telecomando (per la vostra new repo remoto),
  • e spingere quel commit del nuovo repository locale.
5

Se si desidera mantenere i cinque commit come riferimento, forse si dovrebbe lavorare in un ramo con loro.

  1. git branch new-branch master
  2. Fai i tuoi commit. Dal momento che avete fatto questo, basta resettare la testa del comandante:

    git reset --hard HEAD~5

  3. git merge --squash master new-branch
  4. git push

si finirà con schiacciata impegnarsi sul master e origin/master e 5 commit su new-branch.

+1

+1. Vedi anche http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-and-rebase/2427520#2427520 – VonC

+0

sì. È una buona scelta. Ma ho postato una domanda che descrive la mia situazione non esattamente :).Ho 5 commit e ho bisogno di spingerli al nuovo repo remoto (vuoto)/Quindi non ho tag, che esistono nel mio locale e ho il mio repo remoto ... Pertanto ho chiesto di "schiacciare al volo". .. –