Birleştirme Çakışmaları: Panik Yapmayın — Anlayın ve Çözün
Çakışmalar yeni başlayanları korkutur, ancak bu bölümden sonra onları sakinlikle karşılayacaksınız. Çakışmaların neden oluştuğunu (Git zihin okuyamaz — hangi değişikliğin daha önemli olduğunu bilemez), çakışma işaretleyicilerinin nasıl okunacağını ve doğru çözümün nasıl seçileceğini inceleyeceğiz. İki yaklaşım göstereceğiz: manuel çözüm ve birleştirme araçlarını kullanma.
- Birleştirme çakışmalarının doğasını anlayacak ve onlardan korkmayı bırakacaksınız — artık öngörülebilir hale gelecekler.
- Git işaretleyicilerini doğru okuyarak bir çakışmayı kendi başınıza manuel olarak çözebileceksiniz.
- Editörünüzde görsel çakışma çözümü için bir birleştirme aracı yapılandırmayı öğreneceksiniz.
จุดเริ่มต้นของบทเรียน
Üç Tür Birleştirme Çakışması
- İçerik: Aynı satırlardaki değişiklikler
- Yeniden Adlandırma: Dosya düzenlenmiş ve yeniden adlandırılmış
- Silme: Dosya bir daldan silinmiş, diğerinde değiştirilmiş
- Yeniden adlandırmalar Git için en zorlu olanlardır
- Şüpheli çakışmalarda dosya geçmişini kontrol edin
Önemli bir proje üzerinde çalıştığınızı ve aniden Git'in bir çakışma bildirdiğini hayal edin. Çözüme giden ilk adım, türünü anlamaktır. İçerik çakışmaları, farklı dallarda aynı satırlarda değişiklikler yapıldığında ortaya çıkar. Yeniden adlandırmalar daha karmaşıktır: bir geliştirici dosyanın adını değiştirirken, diğeri aynı anda içeriğini düzenler. Üçüncü tür ise, bir dosyanın bir dalda kaybolup diğerinde var olmaya devam ettiği silmelerdir. Özellikle yeniden adlandırmalar sıklıkla zorluk çıkarır çünkü Git, ad değişikliğinden sonra dosya geçmişini her zaman doğru bir şekilde takip edemez. Bu nedenle, şüpheli çakışmalarda her zaman dosyaların değişiklik geçmişini kontrol edin.
Karmaşık Bir Çakışmanın Anatomisi
- <<<<<<< işaretleyicileri sizin değişikliklerinizi gösterir
- ======= sizin ve diğerinin sürümlerini ayırır
- >>>>>>> çakışma bloğunun sonunu işaret eder
- git status tüm sorunlu dosyaları gösterecektir
- git diff - değişikliklerin ayrıntılı karşılaştırması
Feature dalını main ile birleştirdiğinizi ve bir çakışma mesajı gördüğünüzü varsayalım. Sorunlu dosyaları açın - özel işaretleyiciler fark edeceksiniz. <<<<<<< HEAD ile ======= arasındaki her şey sizin değişikliklerinizdir. ======= ile >>>>>>> feature arasındaki her şey ise birleştirilen daldaki değişikliklerdir. Tüm çakışan dosyaları görmek için git status'u, farkları ayrıntılı olarak görmek için ise git diff'i kullanın. Unutmayın: işaretleyiciler bir hata değil, bir karar vermeniz gereken yere dair bir ipucudur.
#!/bin/bash
# conflict_analysis.sh
echo "Test deposu oluşturuluyor"
mkdir conflict-demo && cd conflict-demo
git init
echo "Dosya oluşturuluyor ve main'e ilk commit"
echo 'Satır 1' > file.txt
echo 'Satır 2' >> file.txt
git add . && git commit -m 'İlk commit'
echo "Feature dalı oluşturuluyor ve ilk satır değiştiriliyor"
git checkout -b feature
sed -i 's/Satır 1/Feature dalında değiştirilen Satır 1/' file.txt
git commit -am 'Feature dalında Satır 1 değiştirildi'
echo "Main'e dönülüyor ve aynı satır değiştiriliyor"
git checkout main
sed -i 's/Satır 1/Main dalında değiştirilen Satır 1/' file.txt
git commit -am 'Main dalında Satır 1 değiştirildi'
echo "Dallar birleştirilmeye çalışılıyor"
git merge feature || echo 'Çakışma!'
echo "\nDurum kontrol ediliyor:"
git status --short
echo "\nÇakışan dosya gösteriliyor:"
cat file.txt
Çakışma Çözüm Stratejileri
- Manuel düzenleme: İşaretleyicileri kaldırın, gerekli olanı bırakın
- GUI araçları: meld, kdiff3 ile görsel karşılaştırma
- --ours/--theirs: Kendi veya başkasının sürümünü kabul edin
- Rebase sırasında çakışmalar her commit için çözülür
- Çözümden sonra git add ve git commit yapmayı unutmayın
Bir çakışma keşfedildiğinde, birkaç yolunuz vardır. İşaretleyicileri kaldırarak ve gerekli kodu bırakarak dosyayı manuel olarak açıp düzenleyebilirsiniz. Görsel odaklılar için meld veya kdiff3 gibi araçlar uygundur - bunlar dosyanın üç sürümünü aynı anda gösterir. Kendi değişikliklerinizden eminseniz, kendi sürümünüzü tutmak için git checkout --ours veya başkasınınkini tutmak için --theirs kullanın. Özellikle rebase sırasında dikkatli olun: burada çakışmalar yeniden temellenen her commit'te ortaya çıkabilir.
#!/bin/bash
# resolve_strategies.sh
echo "Yöntem 1: Manuel Çözüm"
echo 'Çakışma işaretleyicilerini kaldırarak dosyayı düzenleyin'
echo 'Ardından: git add file.txt komutunu çalıştırın'
echo "\nYöntem 2: Kendi Sürümümüzü Kabul Et"
git checkout --ours file.txt
echo "\nYöntem 3: Onların Sürümünü Kabul Et"
git checkout --theirs file.txt
echo "\nYöntem 4: Birleştirme Aracı Kullan"
echo 'git mergetool --tool=meld'
echo "\nYöntemi seçtikten sonra birleştirmeyi tamamlayın:"
echo 'git commit -m "Birleştirme çakışmasını çöz"'
บทเรียนฉบับเต็มใช้ได้เมื่อสมัครสมาชิก
ฉบับเต็มมีสไลด์เพิ่มอีก 34 สไลด์
วิดีโอ สไลด์ทั้งหมด โน้ต แบบทดสอบ AI ติวเตอร์ และการสัมภาษณ์จะเปิดหลังเข้าสู่ระบบและสมัครสมาชิก
เข้าสู่ระบบหรือลงทะเบียน สมัครสมาชิกเนื้อหาบทเรียน
- Üç Tür Birleştirme Çakışması
- Karmaşık Bir Çakışmanın Anatomisi
- Çakışma Çözüm Stratejileri
- Önleme ve En İyi Uygulamalar
- Git'te Çok Satırlı Çakışmalar Nasıl Okunur
- Bağlam İşaretleyicilerinin Şifresi
- İç İçe Çakışmalar: Çözüm Stratejileri
- Otomasyon ve Gelişmiş Araçlar
- Seçim Stratejisi: HEAD mi Dal mı?
- 'En Az Şaşırtma' Prensibi
- Anlamsal Çakışmalar: Görünmez Düşmanlar
- Araçlar ve Otomasyon
- Araç Seçimi: Ne Zaman Ne Kullanılmalı
- VS Code: Yapılandırma ve Gelişmiş Özellikler
- Beyond Compare: Karmaşık Çakışmalar İçin Senaryolar
- Git Flow ile Entegrasyon ve Otomasyon
- .gitattributes ile Birleştirmeyi Otomatikleştirme
- Kendi Merge Sürücümüzü Yazmak
- Git rerere — Kişisel Asistanınız
- Gelişmiş Otomasyon Stratejileri
- Büyük Ekipler için Workflow Tasarlama
- Çakışmaları Önleme Aracı Olarak Code Review
- Uzun Ömürlü Özellik Dallarıyla Çalışma Stratejileri
- Güvenli Çakışma Çözümü Stratejileri
- Birleştirmeden Sonra Test: Neler Kontrol Edilmeli
- Güvenli Çakışma Çözümü Stratejileri
- Birleştirmeden Sonra Test: Neler Kontrol Edilmeli
- CI/CD Entegrasyonu ve Önleyici Tedbirler
- Rebase Sırasında Çakışmaların Merge'den Farkı
- --rebase-merges ile Çalışmak
- Sıralı Çakışmaları Çözme Stratejileri
- Rebase'de İleri Teknikler ve Hata Ayıklama
- Kalite Kontrol Sistemi Olarak CI/CD
- GitHub Actions: Çatışma Kontrolü
- Danger-JS: Akıllı Kontrol Otomasyonu
- CI/CD'de Otomatik Çatışma Çözümü
- Çatışmalar: Panikten Güvene
บทความเกี่ยวกับบทเรียนนี้
- git merge: วิธีรวมบรานช์และแก้ความขัดแย้ง
- Git และ GitHub: ต่างกันอย่างไร และเชื่อมโยงกันอย่างไร
- วิธีติดตั้ง Git บน Windows, macOS และ Linux
- Git คืออะไร และนักพัฒนาต้องใช้เพื่ออะไร
- Git Bash: คืออะไร และใช้งานบน Windows อย่างไร
บทเรียนทั้งหมดในคอร์สนี้
- Giriş: Sıfırdan Güvenilir Geliştiriciye Git
- Git Neden Gereklidir — ve Neden İşe Alırken Onsuz Yapamıyorlar
- Kurulum ve Yapılandırma: Git'i İlk Çalıştırmaya Hazırlama
- İlk Depo: init, add, commit ve İndeksin Sihri
- Geçmişi Okumak: log, diff, show ve Geçmişte Gezinti
- Dallar: Kodunuzun Paralel Gerçekliği
- Hataları Geri Alıyoruz: restore, reset, revert — Doğru ve Tehlikeli Kullanımları
- GitHub ve Uzaktaki Depolar: Kodunuz Bulutta
- Takım Çalışması: Fork'lar, Özellik Dalları ve Pull Request'ler
- Birleştirme Çakışmaları: Panik Yapmayın — Anlayın ve Çözün
- Gerçek Ekiplerde Git Süreçleri: Hangi İş Akışı Seçilmeli
- Gelişmiş Araçlar: rebase, stash, cherry-pick ve etiketler
- Final Proje: Gerçek Ekip Çalışmasını Simüle Ediyoruz