Un'altra domanda detta git pull
è come un git fetch
+ git merge
.
Ma qual è la differenza tra git pull
VS git fetch
+ git rebase
?
Un'altra domanda detta git pull
è come un git fetch
+ git merge
.
Ma qual è la differenza tra git pull
VS git fetch
+ git rebase
?
Risposte:
Dovrebbe essere abbastanza ovvio dalla tua domanda che in realtà stai solo chiedendo della differenza tra git merge
e git rebase
.
Quindi supponiamo che tu sia nel caso comune: hai fatto un po 'di lavoro sul tuo ramo principale e tiri fuori da quello di origine, che ha anche fatto un po' di lavoro. Dopo il recupero, le cose sembrano così:
- o - o - o - H - A - B - C (master)
\
P - Q - R (origin/master)
Se ti unisci a questo punto (il comportamento predefinito di git pull), supponendo che non ci siano conflitti, finisci con questo:
- o - o - o - H - A - B - C - X (master)
\ /
P - Q - R --- (origin/master)
Se d'altra parte hai fatto il rebase appropriato, finiresti con questo:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
Il contenuto del tuo albero di lavoro dovrebbe finire lo stesso in entrambi i casi; hai appena creato una storia diversa che porta ad essa . Il rebase riscrive la tua storia, facendola sembrare come se ti fossi impegnata in cima al nuovo ramo principale di origine ( R
), invece che nel punto in cui avevi commesso ( H
). Non dovresti mai usare l'approccio rebase se qualcun altro ha già estratto dal tuo ramo principale.
Infine, tieni presente che puoi effettivamente impostare git pull
un determinato ramo per usare rebase invece di unire impostando il parametro config branch.<name>.rebase
su true. Puoi anche farlo per un singolo pull usando git pull --rebase
.
git pull
è come correre git fetch
allora git merge
git pull --rebase
è come git fetch
alloragit rebase
git pull
è come un git fetch
+ git merge
.
"Nella sua modalità predefinita, git pull è una scorciatoia
git fetch
seguita dagit merge
FETCH_HEAD" Più precisamente,git pull
viene eseguitogit fetch
con i parametri indicati e quindi chiamagit merge
per unire le teste di ramo recuperate nel ramo corrente "
(Rif: https://git-scm.com/docs/git-pull )
'Ma qual è la differenza tra git pull
VS git fetch
+ git rebase
'
Ancora una volta, dalla stessa fonte:
git pull --rebase
"Con --rebase, esegue git rebase invece di git merge."
'la differenza tra merge
e rebase
'
anche qui viene fornita una risposta:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(la differenza tra l'alterazione del modo in cui viene registrata la cronologia delle versioni)
git fetch + git rebase
funzionano i comandi da ora. Non ci sono più o meno conflitti sul nostro git tree da ora :)