Differenza tra git pull --rebase e git pull --ff-only


102

Diciamo origin/masterha commit A--B--Ce il mio local/masterha commit A--B--D.

Cosa succederà se lo uso git pull --rebase?

Cosa succederà se lo uso git pull --ff-only?

C'è qualche differenza nell'albero di commit risultante?

Risposte:


127

Cosa succederà se utilizzo git pull --rebase?

git pull --rebase è più o meno equivalente a

git fetch
git rebase origin/master

cioè le modifiche remote ( C) verranno applicate prima delle modifiche locali ( D), risultando nella seguente struttura ad albero

A -- B -- C -- D

Cosa succederà se utilizzo git pull --ff-only?

Fallirà.

git pull --ff-only corrisponde a

git fetch
git merge --ff-only origin/master

--ff-onlyapplica le modifiche remote solo se possono essere fatte avanzare rapidamente. Dall'uomo:

Rifiuta di unire e uscire con uno stato diverso da zero a meno che l'attuale HEAD non sia già aggiornato o l'unione possa essere risolta come un avanzamento rapido

Poiché le filiali locali e remote si sono discostate, non possono essere risolte con un avanzamento rapido e git pull --ff-onlyfallirebbero.


Cosa accadrebbe se non ci fosse alcun commit Dnel cambiamento locale? Entrambi i comandi sarebbero equivalenti?
Nico

7
Sì, risulterebbero entrambi A--B--C.
Gabriele Petronella

cosa farebbe git pull --rebase --ff-only? (supponendo che ci siano C e D)
Refael Ackermann

2
IIRC l'opzione --ff-only viene semplicemente ignorata se abbinata a --rebase
Gabriele Petronella

5
@BreakingBenjamin è utile se vuoi garantire una cronologia lineare. Per impostazione predefinita pullpuoi introdurre merge commit, mentre potresti preferire lavorare solo con rebase e ff.
Gabriele Petronella
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.