Git birleştirme nasıl kullanılır?

Yayınlanan: 2023-01-03
Çimenli bir parkta birleşen iki patika.
Usta Eller/Shutterstock.com
Bir geliştirme şubesini mevcut şubeyle birleştirmek için "git merge dev-branch-name" kullanın. Bir birleştirmeyle ilgili çakışma uyarıları alırsanız, bundan çıkmak için "git birleştirme --abort" komutunu kullanın veya etkilenen dosyaları düzenleyin ve ardından bunları kesinleştirin.

Git, 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.

İçindekiler

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.

Git Dalları Nasıl Çalışır?
İLGİLİ Git Dalları Nasıl Çalışır?

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 

Bir dalın durumunu görmek için git durumunu kullanma

  • Ş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 dalı kontrol etme ve durumunu görmek için git durumunu kullanma

"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.

Bir şubenin birleştirilmesinden önceki taahhüt geçmişi

“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 

bir dalı git birleştirme komutuyla birleştirme

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.

Bir şubenin birleştirilmesinden sonraki taahhüt geçmişi

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 

Değişiklikleri uzak bir depoya gönderme

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 

Yerel depodaki bir dalı silme

Uzak havuzdaki dalı silmek için şu komutu kullanın:

 git itme kaynağı --delete bugfix14 

Uzak depodaki bir dalı silme

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.

Hızlı ileri birleştirmeden önceki taahhüt geçmişi

"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.

Hızlı ileri birleştirmenin sonucunu görüntülemenin bir yolu

Hangisi bununla aynı:

Hızlı ileri birleştirmenin sonucunu görüntülemenin başka bir yolu

Bu sadece bununla aynı:

Hızlı ileri birleştirmenin sonucunu görüntülemenin başka bir yolu

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 

Hızlı ileri birleştirme mümkün değilse üç yollu birleştirmenin kullanılmasını önlemek için --ff-only seçeneğini kullanma

Git şikayet edecek ve mümkün değilse çıkacaktır.

 git birleştirme --ff-only bugfix16 

Hızlı ileri birleştirme mümkün olmadığından ve --ff-only seçeneği kullanıldığından Git herhangi bir birleştirme gerçekleştirmiyor

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 

Raporlama çakışmalarını ve bir birleştirmeyi durdurmayı alın

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.

Git, bir dosya içindeki çakışmaları nasıl tanımlar?

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.

Düzenlenen metin, birleştirme çakışmasını çözü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" 

Çakışmaları çözdükten sonra bir birleştirme işlemini tamamlamak için commit komutunu kullanma

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?