Perbedaan antara git pull --rebase dan git pull --ff-only

108

Katakanlah origin/mastertelah berkomitmen A--B--Cdan saya local/mastertelah berkomitmen A--B--D.

Apa yang akan terjadi jika saya menggunakan git pull --rebase?

Apa yang akan terjadi jika saya menggunakan git pull --ff-only?

Apakah ada perbedaan dalam pohon komit yang dihasilkan?

Nico
sumber

Jawaban:

132

Apa yang akan terjadi jika saya menggunakan git pull --rebase?

git pull --rebase kira-kira setara dengan

git fetch
git rebase origin/master

yaitu perubahan jarak jauh Anda (C ) akan diterapkan sebelum perubahan lokal ( D), menghasilkan pohon berikut

A -- B -- C -- D

Apa yang akan terjadi jika saya menggunakan git pull --ff-only?

Itu akan gagal.

git pull --ff-only sesuai dengan

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

--ff-onlymenerapkan perubahan jarak jauh hanya jika dapat dipercepat. Dari pria itu:

Menolak untuk menggabungkan dan keluar dengan status bukan nol kecuali HEAD saat ini sudah diperbarui atau penggabungan dapat diselesaikan sebagai percepatan

Karena cabang lokal dan jarak jauh Anda telah menyimpang, mereka tidak dapat diselesaikan dengan maju cepat dan git pull --ff-onlyakan gagal.

Gabriele Petronella
sumber
Apa yang akan terjadi jika tidak ada komitmen Ddalam perubahan lokal? Apakah kedua perintah itu setara?
Nico
7
Ya, keduanya akan menghasilkan A--B--C.
Gabriele Petronella
apa yang akan git pull --rebase --ff-onlydilakukan? (dengan asumsi ada C & D)
Refael Ackermann
2
IIRC opsi --ff-only diabaikan begitu saja saat dipasangkan dengan --rebase
Gabriele Petronella
5
@BreakingBenjamin berguna jika Anda ingin menjamin sejarah linier. Secara default pulldapat memperkenalkan komit gabungan, sedangkan Anda mungkin lebih suka bekerja dengan rebase dan ff saja.
Gabriele Petronella