2011-09-26 16 views
17

Quando si usa Git, spesso mi ritrovo a fare quanto segue quando si lavora in master:Pull, rebase, spinta, in un comando (o solo alcuni)

# work work work... 
$ git checkout -b temp 
$ git commit -a -m 'more work done' 
$ git checkout master 
$ git pull origin master 
# turns out master was updated since my previous pull 
$ git checkout temp 
# I don't want a merge commit for a simple bugfix 
$ git rebase master 
$ git checkout master 
$ git merge temp 
$ git push origin master 
$ git branch -d temp 

... e mi stanco di fare Questo. C'è un modo per fare questo ballo senza tutte le casse e preferibilmente senza (manualmente) creare il ramo temporaneo?

risposta

19

Se non ti dispiace, non la creazione di un ramo chiamato temp, si può solo fare quanto segue tutto il master:

git commit -a -m 'more work done' 
git fetch origin 
git rebase origin/master 

... o equivalentemente:

git commit -a -m 'more work done' 
git pull --rebase origin master 

Se lo fai vuoi mantenere il ramo temp, tuttavia puoi ancora renderlo un po 'più breve non controllando master solo per fare il pull - devi solo fetch e poi rebase il tuo ramo su origin/master:

# work work work... 
$ git checkout -b temp 
$ git commit -a -m 'more work done' 
$ git fetch origin 
# It looks like origin/master was updated, so: 
$ git rebase origin/master 
# Then when you finally want to merge: 
$ git checkout master 
$ git merge temp 
$ git push origin master 
$ git branch -d temp 

sehe's answer mi ricorda che è possibile sostituire:

$ git fetch origin 
$ git rebase origin/master 

... con:

$ git pull --rebase origin master 

... che è quasi equivalente. La differenza è che quando si esegue git fetch origin, tutte le diramazioni di rilevamento remoto per origin verranno aggiornate, mentre quando si estrae un ramo particolare da origin, nessuno di essi lo è: è solo il riferimento temporaneo FETCH_HEAD che viene aggiornato. Personalmente preferisco eseguire un comando aggiuntivo (git fetch origin) e vedere tutti i rami remoti che sono cambiati nell'output.

+0

Grande! Non conoscevo l'opzione '--rebase', sembra adattarsi perfettamente al mio flusso di lavoro. –

+0

Ottimo lavoro per me! A proposito, come possiamo ignorare le "modifiche non applicate/non salvate"? –

8

È possibile almeno ottimizzare il ribasamento: git pull --rebase

io non sono esattamente sicuro di come ti piacciono le cose, ma mi piace il mio flusso di lavoro un po 'come questo:

git checkout -b temp 
git commit -a -m 'more work done' 
git pull --rebase origin master 

In questo modo io continuo la mia concentrarsi sul ramo a portata di mano.

Poi, più tardi, lo faccio

git checkout master 
git pull origin master 
git merge temp 

ecc