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

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.

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. Sadece birleştirmelerin her zaman bir dal aldığını ve onu bir hedef şube, o şube ne olursa olsun. 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 kullanacağız git status emretmek.

git status

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

  • Şubede bugfix14: Şu anki şubemizdir.
  • Şubeniz ‘origin/bugfix’ ile güncel: Yerel depomuzdaki şube, uzak depodaki şube ile aynı taahhüt geçmişine sahiptir. Bu, aynı oldukları anlamına gelir.
  • taahhüt edecek bir şey yok Aşama alanında taahhüt edilmemiş herhangi bir değişiklik yoktur.
  • çalışan ağaç temiz: Çalışma dizininde hazırlanmamış değişiklik yok.

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 checkout master
git status

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 Modelini Nasıl Seçersiniz?

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 merge 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 bir üçlü birleştirme. 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 itme emretmek.

git push

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 istiyorsanız, bunu kullanarak yapabilirsiniz. git branch komutu ile -d (sil) seçeneği.

git branch -d bugfix14

Yerel depodaki bir dalı silme

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

git push origin --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 kullanabiliriz git merge emretmek:

git merge 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 hızlı ileri birleştirme gerçekleştirecek ne zaman yapabilirse. “Ana” dala yapılan taahhütler hızlı ileri birleştirmenin mümkün olmadığı anlamına geliyorsa, Git bir üçlü birleştirme.

yapamazsın Kuvvet hızlı ileri birleştirme – 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 (yalnızca hızlı ileri sarma).

Bu, “bugfix15” dalını “ana” dalla birleştirir, ancak yalnızca hızlı ileri sarma mümkünse.

git merge --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 merge --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 merge 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. kullanarak tamamen geri çekilebiliriz. --abort seçenek:

git merge --abort

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, yedi küçük karakterle sınırlandırılmıştır “<<<<<<<” ve yedi büyüktür karakteri”>>>>>>>“, yedi eşittir işaretli”=======” onların arasında.

  • Eşittir işaretlerinin üzerindeki kod, birleştirdiğiniz şubedendir. içine.
  • Eşittir işaretinin altındaki kod, denemeye çalıştığınız dalın kodudur. birleştirmek.

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. Ama dikkat, kullandığımız commit bunu yapmak için komut, merge emretmek.

Dosyayı hazırlayarak ve her zamanki gibi taahhüt ederek değişikliği taahhüt ediyoruz. Son taahhüdü yapmadan önce durumu kontrol edeceğiz.

git add rot.c
git status
git commit -m "Merged 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, her geliştiriciden yalnızca kodlarının ne işe yaradığını ve değişikliklerini neden yaptıklarını açıklamak için 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.

İLİŞKİLİ: GUI Git İstemcisi Kullanmalı mıyım?

LEAVE A REPLY

Please enter your comment!
Please enter your name here