Trovo molto utile il sito Visualizzazione di Git Concepts con D3 per vedere come apparirà l'albero quando vari git i comandi sono eseguiti da vari stati.
Consente di tornare alla traccia Disabled mail delivery...
commit.
Il prossimo commit era sul ramo dell'invito fatto da Red come origine / master è stato fuso in quello.
Purtroppo teal era ancora sul ramo principale e ha fatto due commit sul master - Removed duplicate imports...
e Moved user routes...
che sono stati poi uniti di nuovo in invito da rosso.
Ora stavi anche lavorando su ciò che tu aveva localmente come master e ha fatto il adjust buildpath
commit. Tuttavia, quando provate a spingere questo in un punto in cui diceva che il vostro master non era sincronizzato con il telecomando - e lo era. Master on remote era a Moved user routes
e quindi hai dovuto unire il telecomando a quello che avevi.
git merge
fa anche un commit quando fa la sua fusione.
Dal link D3 in alto, la git merge è molto vicina allo stato che avevi al adjust buildpath
commit. Fare git merge master
nel tuo albero è come fare un git merge dev
nella sandbox D3:
Equindigitmergedev
ciportaa:
Commit e065536...
è esattamente come Merge branch 'master' of https://...
in questo caso.
Ma cosa succede se non vuoi per avere quei commit. Ad alcune persone non piacciono (personalmente, io ... ma questa è la mia preferenza)
Quindi stai guardando git rebase
Questo riapplicherà i commit da un ramo all'altro.
Notadinuovolastrutturamoltosimilecomeesempiodiunione(nota:hocontrollatomasterinvecedilasciarlosudev).Epoiungitrebasedev
riportatuttoinsenzailcommitaggiuntivo.
Notare che il commit bb92e0e
che era il vecchio capo principale è ora disattivato e il nuovo master head è decfd13
perché la cronologia è riapplicata in cima di quello che hai fatto.
C'è un trucco lì. Stai riscrivendo la tua cronologia locale quando esegui un rebase. Se hai condiviso lo stato del tuo repository (spingendolo da qualche altra parte) dove è impegnato bb92e0e
, il rebasing confonderà tutti. Se devi fare un git push --force
, probabilmente stai sbagliando.
Nota che quando fai un git pull
, stai facendo i comandi git fetch
e git merge
- quindi il commit aggiuntivo. Puoi fare un git pull --rebase
che sarà un rebase piuttosto che un'unione per il secondo passo (puoi anche modificare la tua git config per farlo di default). Puoi giocare un po 'con questo esempio' git pull 'nel sito D3.
Si noti che la convenzione sul proprio albero sembra essere pull
e merge
piuttosto che rebase
- potrebbe essere meglio continuare a seguire tale convenzione e solo capire (e accettare) da dove provengono i commit.