2010-09-05 12 views
9

Ho appena iniziato a utilizzare Git e trovo che mentre sto implementando una funzione in un ramo, incontrerò alcuni bug che devono essere spinti sul trunk il prima possibile. Per farlo, utilizzo la cassa per tornare al bagagliaio, apportare le mie modifiche e confermarle. Ora ho un baule privo di bug.Come posso ottenere modifiche dal mio bagagliaio in un ramo?

Sfortunatamente, il mio ramo deve aver corretto anche questo errore. Poiché la funzione non è completa, non posso semplicemente unire il ramo nel bagagliaio. Come posso modificare il ramo in modo che riceva le modifiche apportate al bagagliaio?

Se è importante, sto sviluppando da solo e quindi ho solo un unico repository di cui preoccuparsi.

Sto usando TortoiseGit in modo che le istruzioni specifiche siano utili ma non necessarie.

risposta

18

Assicuratevi di avere il vostro ramo estratto (git checkout branch-name) ed eseguire

git rebase master

e risolvere eventuali conflitti che arrivano.

Se non si è sicuri di cosa facciano questi comandi, provare a non utilizzare TortoiseGit e utilizzare il terminale. Ti aiuterà a capire veramente i comandi.

ATTENZIONE: questo presuppone un ramo locale. Se hai condiviso il ramo, non eseguire il rebase (perché modifica la cronologia). Eseguire

git merge master

mentre siete sul vostro ramo. Questo ha meno storia pulita, ma può essere utilizzato.

La differenza è:

  • Rebase - riscrive il ramo ontop del maestro, la riproduzione di tutte le modifiche
  • Unisci - una fusione normale, creando un commit con due genitori
+0

Questo copierà tutte le modifiche che sono in master e non il ramo al ramo. Riapplicherà anche le modifiche ai rami in modo che vengano dopo le modifiche nel master nella cronologia del repository. –

+0

Sì, non è il comportamento desiderato? Immagino che tu possa fare un cherry-pick, ma che dovrebbe essere evitato se possibile. Dipende se hai qualche commit sul master che non vuoi nell'altro ramo. Comunque, perché dovresti avere commetti in master, comunque? Il maestro dovrebbe generalmente essere stabile. – alternative

+0

Nel caso generale, dovresti effettivamente unire, ma dovresti unire un ramo di bugfix piuttosto che un master direttamente. È possibile creare il ramo di bugfix dall'antenato comune di tutti i rami che ne hanno bisogno, quindi unirlo in tutti (in questo caso, master e funzionalità). Ciò evita di unire inutilmente * altro * contenuto dal master nel tuo branch di funzionalità. – Cascabel

1

Se la vostra repository non è disponibile per nessun altro, quindi il codice git rebase master come suggerito sopra funzionerà.

Se il repository è disponibile pubblicamente, in realtà non si desidera rebase poiché potrebbe rovinare altri utenti che hanno clonato il repository. In tal caso, si desidera utilizzare git merge master per unire le modifiche dal trunk al ramo delle funzionalità.