L04 — Git: branch, conflict, merge vs rebase#
Modül:
A4· Süre: ~1 saat · Kırık lab: yok
Sıfırdan bir repo kurar, iki dal açar, bilerek bir conflict üretip çözer; sonra aynı işi bir kez merge, bir kez rebase ile yapıp geçmiş grafiğinin nasıl farklılaştığını görürsün. Conflict korkusu, onu kontrollü bir ortamda bir kez yaşayınca gider.
Gerekenler#
git(2.x). Başka bir şey gerekmez — tamamen yerel.
Görev#
- Repoyu kur.
starter/init-lab.sh./repoaltında tek commit'li bir başlangıç yaratır (notlar.mddosyası). - Conflict üret ve çöz.
main'denfeature-mergedalı aç,notlar.md'nin aynı satırını değiştir, commit et.main'e dön, aynı satırı farklı şekilde değiştir, commit et.feature-merge'imain'emergeet → conflict. Elle çöz,add+ commit.- Aynı işi rebase ile yap.
- Başlangıca benzer bir kurulumla
feature-rebasedalı aç, bir commit ekle. main'erebaseet (git rebase main), grafiğin doğrusal kaldığını gör.- Farkı yaz.
git log --oneline --graph --allçıktısını incele.report.txt'e: merge bir birleştirme commit'i bırakır; rebase geçmişi doğrusal tutar ama commit'leri yeniden yazar. Hangisi ne zaman? Kendi cümlelerinle.
Kabul kriterleri#
-
bash verify.shsıfır hatayla geçiyor. -
repo/en az bir merge commit içeriyor (git log --mergesboş değil). -
report.txt"merge commit" ve "rebase → doğrusal geçmiş" ayrımını açıklıyor.
İpucu (çözüm değil)#
- Conflict işaretleri:
<<<<<<<,=======,>>>>>>>. İkisini de sil, doğru içeriği bırak,git add, sonra commit. - Yarıda kaldıysan
git merge --abort/git rebase --abortseni geri getirir — panik yok. - Grafiği gör:
git log --oneline --graph --all. - Kural: paylaşılmış (push edilmiş) dalları rebase etme — geçmişi yeniden yazmak başkalarının kopyasını bozar.
Takılırsan solution/'a bak — ama önce kendin dene.