Kapan git rebase mengalami konflik?
Saya telah membaca beberapa posting di forum ini, progit, Youtube dan beberapa blog acak untuk rebase.
Bentuk paling umum untuk menyimpulkan subjek ini adalah:
- A - B - C Master
\ D - E Topic
dan saya melakukan:
git checkout Topic
git rebase Master
Idealnya, itu adalah:
- A - B - C - D' - E' Master, Topic
Tapi 2 kekhawatirannya adalah:
- Apakah D '= D, E' = E?
- Apa itu konflik git rebase?
Mengenai perhatian pertama dan posting ini ,
- Rebase melakukan penggabungan pada D dan E, dan yang terpenting, dengan masukan yang rumit.
Misalnya kalau masuk ke D, sesuai postingan dan kalau saya benar
- HEAD terlepas ke C
- Git membandingkan antara perubahan dari A ke D dan perubahan dari A ke C
- Setelah penggabungan, git membandingkan antara D ', D dan E
Dan ini paling membingungkan saya. Mengapa penggabungan melibatkan lebih dari 2 komit? Juga, bagaimana konflik muncul?
EDIT:
Menjalankan beberapa perintah, harap lihat yang berikut ini:
git init
Membuat Random.txt Isi: Master 1
git add Random.txt
git commit -m "Master 1"
Buat cabang baru
git checkout -b rebase_conflict
Ubah Konten Random.txt: 1
git add Random.txt
git commit -m "Conflict 1"
Ubah Acak. Konten txt: 2
git add Random.txt
git commit -m "Conflict 1"
Beralih ke master
git checkout master
Ubah konten Random.txt: Master 2
git add Random.txt
git commit -m "Master 2"
Ganti cabang dan rebase
git checkout rebase_conflict
git rebase master
Dapatkan kesalahan konflik Alter Random.txt Isi: 1
git add Random.txt
git rebase --continue
Pada titik ini, saya mengharapkan konflik rebase lagi, karena menurut logika
-- Master 1 -- Master 2
\ -- Conflict 1 -- Conflict 2
Setelah rebase pertama
-- Master 1 -- Master 2 -- Conflict 1'
\ -- Conflict 1 -- Conflict 2
Pada tahap ini saya mengharapkan komit baru di atas Konflik 1 '. Apakah tidak ada konflik gabungan antara Konflik 2 dan Konflik 1 '?
Karena Konflik 1 'konten Random.txt: 1, sedangkan
Bentrok 2 konten Random.txt: 2
Mereka mengubah baris yang sama, bukan?
Jawaban
Penggabungan atau pemindahan nilai dalam contoh Anda di atas dapat mengakibatkan konflik penggabungan. Mungkin hanya satu atau yang lain yang akan mengalami konflik juga. Untuk memahami apa yang dilakukan rebasing, perhatikan diagram berikut yang menunjukkan seperti apa Topictampilan setelah rebasing Master:
Topic: -- A -- B -- C -- D' -- E'
Di sini apostrof menunjukkan bahwa Ddan Ekomit telah diterapkan kembali ke basis baru Master. Saat setiap komit diterapkan kembali, ada kemungkinan konflik penggabungan. Jadi, dalam kasus penerapan kembali N komit, mungkin ada N set konflik penggabungan. Di sisi lain, penggabungan akan selalu menghasilkan paling banyak satu kumpulan konflik penggabungan. Jika ini menjadi perhatian Anda, Anda mungkin lebih menyukai penggabungan daripada rebasing.