Git Pull vs Git Rebase

127

Aku noob di Git, dan mencoba untuk mempelajari perbedaan antara git pullvs git rebase. Dapatkah seseorang memberikan contoh kapan harus menggunakan opsi mana karena saya merasa keduanya memiliki tujuan yang sama.

pengguna4943236
sumber
Ya saya lakukan. Perbedaan antara pull dan rebase adalah tarikan melakukan penggabungan. Jadi jawaban atas pertanyaan Anda ada di tautan yang saya tempel.
Thibault D.
1
@ user4943236 1) Anda bahkan tidak tahu siapa yang memberikan suara negatif pada pertanyaan Anda, jangan seenaknya menuduh orang lain tanpa alasan 2) jika itu adalah suara negatif saya, saya tidak akan menghapusnya hanya karena ini sangat mudah untuk menemukan jawaban dengan membaca dokumentasi
Tim
1
Kemungkinan duplikat dari Apa perbedaan antara 'git merge' dan 'git rebase'?
SiGe
Apakah ini menjawab pertanyaan Anda? git pull VS git fetch Vs git rebase
Shiwangini

Jawaban:

131

git pulldan git rebasetidak dapat dipertukarkan, tetapi mereka terhubung erat.

git pullmengambil perubahan terbaru dari cabang saat ini dari jarak jauh dan menerapkan perubahan tersebut ke salinan lokal cabang Anda. Umumnya hal ini dilakukan dengan menggabungkan, yaitu perubahan lokal digabungkan ke dalam perubahan jarak jauh. Begitu git pullpula dengan git fetch & git merge.

Rebasing adalah alternatif penggabungan. Alih-alih membuat komit baru yang menggabungkan dua cabang, itu memindahkan komit dari salah satu cabang di atas yang lain.

Anda dapat menarik menggunakan rebase daripada merge ( git pull --rebase). Perubahan lokal yang Anda buat akan didasarkan pada perubahan jarak jauh, bukan digabungkan dengan perubahan jarak jauh.

Atlassian memiliki beberapa dokumentasi yang sangat baik tentang penggabungan vs. rebasing .

Peter
sumber
52

git-pull - Ambil dari dan integrasikan dengan repositori lain atau cabang lokal GIT PULL

Pada dasarnya Anda menarik cabang jarak jauh ke lokal Anda, contoh:

git pull origin master

Akan menarik cabang master ke repositori lokal Anda

git-rebase - Forward-port local commit ke upstream head GIT REBASE

Yang satu ini menempatkan perubahan lokal Anda di atas perubahan yang dilakukan dari jarak jauh oleh pengguna lain. Sebagai contoh:

  • Anda telah melakukan beberapa perubahan pada cabang lokal Anda, misalnya disebut SOME-FEATURE
  • Teman Anda sementara itu sedang mengerjakan fitur lain dan dia menggabungkan cabangnya menjadi master

Sekarang Anda ingin melihat perubahannya dan perubahan Anda di cabang lokal Anda. Jadi Anda checkout mastercabang:

git checkout master

lalu Anda dapat menarik:

git pull origin master

dan kemudian Anda pergi ke cabang Anda:

git checkout SOME-FEATURE

dan Anda dapat melakukan rebase masteruntuk mendapatkan perubahan terbaru darinya dan menempatkan komitmen cabang Anda di atas:

git rebase master

Saya harap sekarang sedikit lebih jelas bagi Anda.

Tomasz
sumber
15
Anda tidak perlu checkout master. Tetap di cabang Anda dan lakukan: git fetchlalu git rebase origin/master.
Antoine Martin
1
Dengan memeriksa master lokal dan kemudian menarik master asal akan memperbarui master lokal Anda juga. Ini adalah salah satu praktik terbaik yang harus digunakan
Ashwani
21

Singkatnya:

-> Git Merge: Ini hanya akan menggabungkan perubahan Anda dan jarak jauh, dan itu akan membuat catatan riwayat komit lainnya

-> Git Rebase: Ini akan menempatkan perubahan Anda di atas semua perubahan jarak jauh baru, dan menulis ulang riwayat komit, sehingga riwayat komit Anda akan jauh lebih bersih daripada git merge. Rebase adalah operasi yang merusak. Artinya, jika Anda tidak menerapkannya dengan benar, Anda bisa kehilangan komitmen pekerjaan dan / atau merusak konsistensi repositori pengembang lain.

Saurin Vala
sumber