Git birleştirme nasıl kullanılır?
Yayınlanan: 2023-01-03Git, kararlı sürüm dalının kirlenmesini önlemek için geliştirme akışlarını izole etmek için dalları kullanır. Bir şubedeki işi ana akıma taşımak, şubeleri birleştirmek anlamına gelir. İşte bunu nasıl yapacağınız.
Git'te Birleştirme Nedir?
Git'te Bir Dalı Birleştirmeye Hazırlanma
Birleştirme gerçekleştirme
Git'te Hızlı İleri Birleştirme Gerçekleştirme
Git'te Birleştirme Çakışmaları Nasıl Çözülür?
Her şey Sonunda Birleşir
Git'te Birleştirme Nedir?
Git, dallanmayı basit ve hızlı hale getirmek için tasarlandı. Diğer sürüm kontrol sistemlerinin aksine, Git'te dallanma önemsiz bir konudur. Özellikle çok geliştiricili projelerde dallanma, Git'in temel organizasyonel araçlarından biridir.
Dallar, yeni geliştirme çabalarını korumalı alana alır, böylece kod diğer dallardaki, özellikle ana veya ana daldaki kodu etkilemeden değiştirilebilir veya eklenebilir. Bu genellikle kod tabanınızın kararlı sürümünü içerir.
Bu değişiklikleri kararlı kod sürümünüzden izole etmek çok mantıklı. Ancak er ya da geç yeni kod test edilecek, gözden geçirilecek ve ana şubeye gönderilmek üzere onaylanacak. Bu noktada, şubenizi ana şubeyle birleştirmeniz gerekir.
Aslında, şubelerin alt şubeleri olabilir, bu nedenle şubenizi ana şube yerine başka bir şubeyle birleştiriyor olabilirsiniz. Birleştirmelerin her zaman bir dal aldığını ve bu dal ne olursa olsun onu bir hedef dalda birleştirdiğini unutmayın. Master şubenizi başka bir şubeyle birleştirmek isterseniz onu da yapabilirsiniz.
Git'teki çoğu eylem gibi, yerel deponuzda birleştirmeler gerçekleştirir ve bunları uzak deponuza gönderirsiniz.
Git'te Bir Dalı Birleştirmeye Hazırlanma
Yerel Git deposu ve uzak Git deposu olan küçük bir geliştirme projemiz var. “Master” dalından “bugfix14” isimli bir şube oluşturduk ve bir bug'a çözüm üzerinde çalıştık.
Bu çalışma tamamlandı ve kodumuzu test ettik. Her şey beklendiği gibi çalışıyor. Düzeltmemizin yazılımın bir sonraki sürümünün bir parçası olması için bu değişiklikleri ana dala aktarmak istiyoruz.
Birleştirmeyi gerçekleştirmeden önce yapılması gereken küçük bir hazırlık var. Hedef dalın - bu durumda "ana" dalın - ve onunla birleştireceğimiz dalın her ikisinin de güncel olduğundan emin olmamız gerekir.
Bunu yapmak için git status
komutunu kullanacağız.
git durumu
- Şubede bugfix14 : Bu bizim şu anki şubemiz.
- Şubeniz 'origin/bugfix' ile güncel : Yerel havuzumuzdaki şube, uzak depodaki şube ile aynı taahhüt geçmişine sahiptir. Bu, aynı oldukları anlamına gelir.
- taahhüt edilecek bir şey yok Hazırlama alanında taahhüt edilmemiş herhangi bir değişiklik yoktur.
- temiz çalışma ağacı : Çalışma dizininde hazırlanmamış değişiklik yoktur.
Bunların hepsi, şubenin güncel olduğunu ve devam edebileceğimizi gösteriyor. Bunlardan herhangi biri değişikliklerin var olduğunu gösteriyorsa, bunları hazırlamamız, işleme koymamız ve uzaktan kumandaya göndermemiz gerekir. Bu dosyalar üzerinde başka biri çalışmışsa, değişikliklerini uzak depodan çekmemiz gerekebilir.
Birleştireceğimiz şubeyi kontrol etmek, birleştirme işlemini basitleştirir. Ayrıca güncel olduğunu doğrulamamızı da sağlar. Ana şubeye bir göz atalım.
git ödeme ustası
git durumu
"Ana" şubenin güncel olduğuna dair aynı onayları alıyoruz.
İLİŞKİLİ: Ekibiniz İçin Doğru Git İş Akışı ve Dallanma Modeli Nasıl Seçilir?
Birleştirme gerçekleştirme
Birleşmeden önce, taahhütlerimiz şöyle görünür.
“bugfix14” şubesi, “master” şubesinden ayrıldı. "bugfix14" dalı oluşturulduktan sonra "master" dalı için bir taahhüt olmuştur. "bugfix14" şubesine birkaç taahhüt verildi.
İki şubemizin güncel olduğundan emin olduk ve “ana” şubeyi kontrol ettik. “bugfix14” şubesini “master” şubesiyle birleştirmek için komut verebiliriz.
git birleştirme bugfix14
Birleştirme gerçekleşir. "bugfix14" dalı hala mevcuttur, ancak artık o dalda yapılan değişiklikler "master" dalı ile birleştirilmiştir.
Bu örnekte birleştirme komutu üç yollu bir birleştirme gerçekleştirir. Yalnızca iki şube var, ancak ilgili üç taahhüt var. Her iki şubenin de başıdırlar ve birleştirme eyleminin kendisini temsil eden üçüncü bir taahhüttür.
Uzak depomuzu güncellemek için git push komutunu kullanabiliriz.
git itme
Bazı insanlar yan dalları birleştirdikten sonra silmeyi tercih eder. Diğerleri, onları projenin gerçek geliştirme geçmişinin bir kaydı olarak korumaya özen gösterir.
Şubeyi silmek isterseniz git branch
komutunu -d
(sil) seçeneği ile yapabilirsiniz.
git şubesi -d bugfix14
Uzak havuzdaki dalı silmek için şu komutu kullanın:
git itme kaynağı --delete bugfix14
Doğrusal bir taahhüt geçmişiniz olacak, ancak bu gerçek tarih olmayacak.
İLİŞKİLİ: Yerel ve Uzak Depolardaki Git Dalları Nasıl Silinir?
Git'te Hızlı İleri Birleştirme Gerçekleştirme
“Master” şubesine herhangi bir taahhütte bulunmadıysanız, geçmişiniz bu şekilde görünecektir. Ayrıca, geliştirme dalınızı "ana" dalın sonuna eklenecek şekilde yeniden temellendirdiyseniz, bu şekilde görünecektir.
"Master" dalında herhangi bir taahhüt olmadığından "bugfix15" dalını birleştirmek için Git'in tek yapması gereken "master" baş işaretçisini "bugfix15" dalının son taahhüdüne yönlendirmek.
Her zamanki git merge
komutunu kullanabiliriz:
git birleştirme bugfix15
Bu da bize şu sonucu veriyor.
Hangisi bununla aynı:
Bu sadece bununla aynı:
Git, elinden geldiğince hızlı ileri sarma işlemi gerçekleştirir. "Ana" daldaki taahhütler hızlı ileri birleştirmenin mümkün olmadığı anlamına geliyorsa, Git üç yollu birleştirme kullanır.
Hızlı ileri birleştirmeyi zorlayamazsınız -sonuçta bu mümkün olmayabilir- ancak bunun hızlı ileri birleştirme olacağını veya hiçbir şey olmayacağını ilan edebilirsiniz. Git'e yapabiliyorsa hızlı ileri birleştirme kullanmasını, yapamıyorsa üç yollu birleştirme yapmamasını söyleyen bir seçenek vardır. Seçenek --ff-only
hızlı ileri sarma).
Bu, "bugfix15" dalını "ana" dalla birleştirir, ancak yalnızca hızlı ileri sarma mümkünse.
git birleştirme --ff-only bugfix15
Git şikayet edecek ve mümkün değilse çıkacaktır.
git birleştirme --ff-only bugfix16
Bu durumda, "ana" dalda taahhütler vardır, bu nedenle hızlı ileri birleştirme mümkün değildir.
Git'te Birleştirme Çakışmaları Nasıl Çözülür?
Her iki dalda da aynı dosyanın aynı bölümleri değiştirilmişse dallar birleştirilemez. Çakışan düzenlemeleri çözmek için insan etkileşimi gereklidir.
Burada “bugfix17” adlı bir dalda bulunan “rot.c” adlı bir dosyada “master” dalına birleştirmek istediğimiz değişiklikleri yaptık. Ama “master” dalında da “rot.c” değişti.
git birleştirme bugfix17
Birleştirmeye çalıştığımızda çakışma olduğuna dair bir uyarı alıyoruz. Git, çakışan dosyaları listeler ve bize birleştirmenin başarısız olduğunu söyler. --abort
seçeneğini kullanarak tamamen vazgeçebiliriz:
git birleştirme -- iptal
Ancak birleştirmeleri çözmek göründüğü kadar korkutucu değil. Git bize yardımcı olmak için bazı çalışmalar yaptı. Çakışan dosyalardan birini düzenlersek -bizim durumumuzda yalnızca bir tane var- çakışan kod bölümlerinin bizim için vurgulanmış olduğunu görürüz.
Her çakışma, aralarında yedi eşittir işareti " =======
" bulunan yedi küçüktür " <<<<<<<
" ve yedi büyüktür " >>>>>>>
" karakteriyle sınırlanmıştır. .
- Eşittir işaretlerinin üzerindeki kod, birleştirdiğiniz daldandır .
- Eşittir işaretinin altındaki kod, birleştirmeye çalıştığınız dalın kodudur.
Yedi karakterlik kümelerden birini kolayca arayabilir ve dosyanız üzerinden bir çatışmadan diğerine geçebilirsiniz. Her çakışma için, hangi düzenleme grubunu tutacağınızı seçmeniz gerekir. Reddettiğiniz kodu ve Git'in eklediği yedi karakterlik satırları düzenlemelisiniz.
“bugfix17” dalındaki kodu tutacağız. Düzenledikten sonra dosyamız bu şekilde görünüyor.
Şimdi birleştirme işlemine devam edebiliriz. Ancak bunun için merge
komutunu değil commit
komutunu kullandığımızı unutmayın.
Dosyayı hazırlayarak ve her zamanki gibi taahhüt ederek değişikliği taahhüt ederiz. Son taahhüdü yapmadan önce durumu kontrol edeceğiz.
git rot.c ekle
git durumu
git commit -m "Birleştirilmiş bugfix17"
Birleştirme tamamlandı. Artık bunu uzak depomuza gönderebiliriz.
İLİŞKİLİ: Git İşlemlerini Düzeltme, Düzenleme veya Geri Alma (Git Geçmişini Değiştirme)
Her şey Sonunda Birleşir
Sonunda tüm dalların birleştirilmesi gerekir, böylece içlerindeki değişiklikler yetim kalmaz ve unutulmaz.
Şubeleri birleştirmek kolaydır, ancak yoğun, daha büyük ekiplerde çatışmalarla uğraşmak karmaşık hale gelebilir. Çakışmaları çözmek, kodlarının ne işe yaradığını ve değişikliklerini neden yaptıklarını açıklamak için her geliştiriciden girdi gerektirebilir. Hangi düzenlemeleri saklayacağınız konusunda bilinçli bir karar vermeden önce bunu anlamanız gerekir.
Ne yazık ki Git bu konuda yardımcı olamaz.
İLGİLİ: GUI Git İstemcisi Kullanmalı mıyım?