Perbedaan antara git pull dan git pull --rebase

Saya mulai menggunakan git beberapa waktu lalu dan tidak sepenuhnya memahami seluk-beluknya. Pertanyaan utama saya di sini adalah untuk mengetahui perbedaan antara git pull dan git pull --rebase , karena menambahkan opsi --rebase tidak seperti sesuatu yang sama sekali berbeda: itu hanya tarik.

Tolong bantu saya dengan memahami perbedaannya.

202
21 сент. diatur oleh Rndm 21 Sep 2013-09-21 11:24 '13 pada 11:24 2013-09-21 11:24
@ 5 balasan

git pull = git fetch + git merge melawan pelacakan cabang.

git pull --rebase = git fetch + git rebase terhadap pelacakan cabang hulu

Jika Anda ingin tahu bagaimana git merge dan git rebase , baca ini .

225
21 сент. jawabannya diberikan mvp 21 sept. 2013-09-21 11:28 '13 pada 11:28 2013-09-21 11:28

Kadang-kadang kita memiliki hulu yang runtuh / memundurkan cabang tempat kita bergantung. Ini bisa menjadi masalah besar - yang menyebabkan konflik bebas bagi kita jika kita tertinggal.

git pull --rebase

Normal git pull, secara longgar, adalah sesuatu seperti ini (kita akan menggunakan sumber bernama jauh dan cabang bernama foo dalam semua contoh ini):

 # assume current checked out branch is "foo" git fetch origin git merge origin/foo 

Pada pandangan pertama, Anda mungkin berpikir bahwa git pull -rebase melakukan hal itu:

 git fetch origin git rebase origin/foo 

Tapi ini tidak membantu jika tendangan hulu termasuk "hancurkan" (yang berarti bahwa pengidentifikasi tambalan komit berubah, dan bukan hanya pesanan mereka).

Ini berarti git pull --rebase harus melakukan sedikit lebih banyak. Berikut ini penjelasan tentang apa yang dia lakukan dan bagaimana caranya.

Katakanlah titik awal Anda:

 a---b---c---d---e (origin/foo) (also your local "foo") 

Waktu berlalu dan Anda membuat beberapa komitmen di atas "foo" Anda sendiri:

 a---b---c---d---e---p---q---r (foo) 

Sementara itu, dalam kemarahan antisosial, aliran ke atas yang mendukung tidak hanya memperburuk "foo" -nya, ia bahkan menggunakan satu atau dua squash. Rantai komitnya sekarang terlihat seperti ini:

 a---b+c---d+e---f (origin/foo) 

Tarik git pada titik ini akan menyebabkan kekacauan. Bahkan git mengambil; git rebase origin / foo tidak akan memotongnya, karena komit "b" dan "c" di satu sisi, dan fiksasi "b + c" di sisi lain, akan bertentangan. (Dan juga d, e dan d + e).

Apa yang dilakukan git pull --rebase dalam kasus ini:

 git fetch origin git rebase --onto origin/foo e foo 

Ini memberi Anda:

  a---b+c---d+e---f---p'---q'---r' (foo) 

Anda mungkin memiliki konflik, tetapi itu akan menjadi konflik asli (antara p / q / r dan a / b + c / d + e / f), bukan konflik yang disebabkan oleh b / c, bertentangan dengan b + c, dan lainnya.

Jawaban dari (dan sedikit dimodifikasi):
http://gitolite.com/git-pull--rebase

181
21 сент. Jawabannya diberikan oleh Mauri Lopez pada 21 September. 2013-09-21 11:32 '13 pada 11:32 2013-09-21 11:32

Misalkan Anda memiliki dua komitmen di cabang lokal:

  D---E master / A---B---C---F origin/master 

Setelah "git pull" akan:

  D--------E / \ A---B---C---F----G master, origin/master 

Setelah "git pull --rebase" tidak akan ada titik penggabungan G. Perhatikan bahwa D dan E menjadi berbeda:

 A---B---C---F---D'---E' master, origin/master 
27
01 июля '16 в 10:46 2016-07-01 10:46 jawabannya diberikan Deqing 01 Juli '16 pada 10:46 2016-07-01 10:46

Dalam kasus paling sederhana, tidak ada tabrakan

  • with rebase: mengembalikan transaksi lokal pada HEAD jarak jauh dan tidak membuat komit gabungan
  • no / normal: merge dan membuat merge merge

Lihat juga:

man git-pull

Lebih khusus, git menarik git mengambil dengan parameter yang diberikan dan memanggil git menggabungkan untuk menggabungkan cabang-cabang yang diterima dari cabang ke cabang saat ini. Menggunakan --rebase menjalankan git rebase alih-alih git merge.

Lihat juga:
Kapan git pull --rebase digunakan?
http://git-scm.com/book/en/Git-Branching-Rebasing

8
21 сент. jawabannya diberikan drahnr 21 sep . 2013-09-21 11:28 '13 pada 11:28 2013-09-21 11:28

Untuk ini, penting untuk memahami perbedaan antara Merge dan Rebase.

Rebaz adalah bagaimana perubahan harus mengalir dari puncak hierarki ke bawah dan bergabung - ini adalah bagaimana mereka muncul kembali.

Untuk detail lebih lanjut, lihat http://www.derekgourlay.com/archives/428 .

5
21 янв. jawabannya diberikan oleh Sagar Mody pada 21 Januari 2015-01-21 12:27 '15 pada 12:27 2015-01-21 12:27

Pertanyaan lain tentang tag atau Ajukan Pertanyaan