Birleştirme çakışmalarını çözümleme

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Birleştirdiğinizde veya yeniden temel aldığınızda Git'e, bir dalda yapılan değişiklikleri başka bir dalda yapılan değişikliklerle tümleştirmesini söylemiş olursunuz. Git genellikle yardımınız olmadan birleştirmeyi tamamlar veya otomatik olarak yeniden temel alır. Ancak Git, bir dalda yapılan bir değişikliğin başka bir dalda yapılan bir değişiklikle çakıştığını fark ederse, çakışmayı çözmenizi ister. Birleştirilmiş dallar aynı dosya satırını farklı düzenlediğinde veya bir dal bir dosyayı değiştirdiğinde ve başka bir dal sildiğinde birleştirme çakışması oluşabilir. Birleştirme çakışmalarını çözümleme işlemi hem Git birleştirme hem de yeniden temellendirme için geçerlidir.

Visual Studio'da veya komut satırını ve herhangi bir metin düzenleyicisini kullanarak birleştirme çakışmalarını çözebilirsiniz.

Git iş akışına genel bakış için bkz . Azure Repos Git öğreticisi.

Bu makalede aşağıdaki görevler için yordamlar sağlanır:

  • Birleştirme çakışmalarını anlama
  • Birleştirme çakışmalarını çözümleme

Birleştirme çakışmalarını anlama

Git birleştirme veya yeniden temel oluşturma, bir kaynak daldan gelen işlemeleri geçerli yerel dalınızla (hedef dal) tümleştirir. Git birleştirme, hızlı veya hızlı olmayan bir birleştirme gerçekleştirir. Hızlı olmayan birleştirme, üç yönlü birleştirme veya doğru birleştirme olarak da bilinir. Git yeniden temeli başka bir birleştirme türüdür. Bu birleştirme türleri aşağıdaki diyagramda gösterilmiştir.

Git birleştirme ve Git yeniden temeli kullanılırken işleme öncesi ve sonrası işlemelerini gösteren diyagram.

Git birleştirme için, hedef dalın ucu kaynak dal içinde varsa, varsayılan birleştirme türü bir hızlı birleştirme olacaktır. Aksi takdirde, varsayılan birleştirme türü hızlı olmayan bir birleştirme olur.

Hedef dalın ucu kaynak daldan ayrılırsa Git hızlı ileriye doğru birleştirme uygulamayacağından, ileriye doğru birleştirme işlemi hiçbir zaman birleştirme çakışması olamaz. Varsayılan olarak, Git mümkün olduğunda hızlı bir birleştirme kullanır. Örneğin Git, yerel dalda yalnızca uzak karşılık gelen dalından çekerek güncelleştirdiğiniz bir hızlı iletme birleştirmesi uygular.

Hızlı olmayan bir birleştirme, kaynak dal değişikliklerini hedef dal değişiklikleriyle tümleştiren yeni bir hedef dal "birleştirme işlemesi" oluşturur. Geçerli değişiklikler, her iki dal için de ortak olan son işlemeden sonra yapılan değişikliklerdir. Yukarıdaki diyagramda işleme C, her iki daldaki son yaygın işlemedir. Herhangi bir kaynak dal değişikliği herhangi bir hedef dal değişikliğiyle çakışırsa Git, birleştirme çakışmasını çözmenizi ister. Birleştirme işlemesi (L) tümleşik kaynak dalını ve hedef dal değişikliklerini içerir. Kaynak ve hedef dal ipuçları (K ve E), birleştirme işlemesinin ana öğeleridir. Dalınızın işleme geçmişinde birleştirme işlemesi, birleştirme işlemi için yararlı bir işaretleyicidir ve hangi dalların birleştirildiğini açıkça gösterir.

Git rebase , hedef dalın işleme geçmişini yeniden sorgular, böylece tüm kaynak dal işlemelerini ve ardından son ortak işlemeden bu yana tüm hedef dal işlemelerini içerir. Yukarıdaki diyagramda işleme C, her iki daldaki son yaygın işlemedir. Bunu görüntülemenin başka bir yolu, yeniden temelin kaynak dal geçmişinin üzerinde hedef dalınızdaki değişiklikleri yeniden oynatmasıdır. Herhangi bir kaynak dal değişikliği herhangi bir hedef dal değişikliğiyle çakışırsa Git, birleştirme çakışmasını çözmenizi ister. Hızlı birleştirmede olduğu gibi, yeniden temel birleştirme işlemesi oluşturmaz. Özellikle, yeniden temel, diğer birleştirme stratejileri için geçerli olmayan mevcut hedef dal işlemelerinin sırasını değiştirir. Yukarıdaki diyagramda commit K', K ile aynı değişiklikleri içerir, ancak C yerine E işlemesine geri bağlandığı için yeni bir işleme kimliğine sahiptir.

Git birleştirme ve yeniden temel oluşturma yalnızca hedef dalı değiştirir; kaynak dal değişmeden kalır. Bir veya daha fazla birleştirme çakışması ile karşılaştığınızda, birleştirmeyi tamamlamak veya yeniden temel almak için bunları çözümlemeniz gerekir. Veya birleştirme/yeniden temel oluşturma işlemini iptal edebilir ve hedef dalı önceki durumuna döndürebilirsiniz.

Birleştirme seçenekleri ve stratejileri hakkında daha fazla bilgi için Bkz . Git başvuru kılavuzu ve Git birleştirme stratejileri.

Birleştirme çakışmaları ne zaman çözülür?

Git birleştirme ve Git yeniden temeli Git iş akışında yaygın olarak kullanılır. Yerel bir özellik veya hata düzeltme dalı üzerinde çalışırken yaygın olarak şunlar uygulanır:

  1. Uzak işlemeleri getirmek ve birleştirmek için düzenli aralıklarla çekerek yerel main dalınızı uzak karşılık gelen dalıyla güncel tutun.
  2. Yeniden temel veya birleştirme kullanarak yerel main dal güncelleştirmelerini yerel özellik dalınızla tümleştirin.
  3. Yerel özellik dalındaki çalışmanızı ilgili uzak dala göndererek yedekleyin.
  4. Özellik tamamlandığında, uzak özellik dalınızı uzak main dalla birleştirmek için bir çekme isteği oluşturun.

Uzak değişiklikleri yerel deponuzla sık sık tümleştirerek, başkaları tarafından yapılan son çalışmaların farkında olabilir ve ortaya çıkan birleştirme çakışmalarını hemen çözebilirsiniz.

Birleştirme çakışmalarını çözümleme

Birleştirme çakışmalarını çözümleme işlemi hem Git birleştirme hem de Git yeniden temeli için geçerlidir. Aşağıdaki adımlar birleştirme sırasında birleştirme çakışmalarının nasıl çözüleceğini açıklasa da, yeniden temel oluşturma sırasında birleştirme çakışmalarını benzer şekilde çözebilirsiniz.

İpucu

Kaynak dal bir uzaktan izleme dalıysa, birleştirmeden önce git getirme işlemini çalıştırarak dalın güncel olduğundan emin olun. Veya Git çekme komutunu çalıştırarak Git getirme işlemini Git birleştirme ile birleştirebilirsiniz.

Visual Studio 2022, Git menüsünü, Git Değişikliklerini ve Çözüm Gezgini bağlam menülerini kullanarak bir Git sürüm denetimi deneyimi sağlar. Visual Studio 2019 sürüm 16.8, Takım Gezgini Git kullanıcı arabirimini de sunar. Daha fazla bilgi için Visual Studio 2019 - Takım Gezgini sekmesine bakın.

  1. Git Deposu penceresinin Dallar bölmesinde hedef dalı kullanıma alın. Ardından kaynak dala sağ tıklayın ve Kaynak dalı hedef> dala> birleştir'i <<seçin.

    Visual Studio'nun Git Deposu penceresindeki dal bağlam menüsündeki Birleştir seçeneğinin ekran görüntüsü.

  2. Visual Studio, Git'in çakışmalar nedeniyle birleştirmeyi durdurması durumunda sizi bilgilendirir. Bu durumda, çakışmaları çözebilir veya birleştirmeyi iptal edip birleştirme öncesi durumuna dönebilirsiniz. Git Değişiklikleri penceresinin Birleştirilmemiş Değişiklikler bölümünde, birleştirme çakışmaları olan dosyalar listelenir. İçeriğinde birleştirme çakışmaları olan bir dosya için, dosyayı çift tıklatarak birleştirme düzenleyicisinde açın.

    Visual Studio'nun Git Değişiklikleri penceresinde birleştirme çakışmaları olan dosyaların ekran görüntüsü.

  3. Birleştirme düzenleyicisinde, Gelen bölmesi kaynak dal dosyası sürümünü, Geçerli bölmesi hedef dal dosyası sürümünü ve Sonuç bölmesi sonuç birleştirme dosyasını gösterir. Belirli kaynak veya hedef dal değişikliklerini uygulamak için, saklamak istediğiniz çakışan satırların yanındaki onay kutusunu seçin. Sonuç bölmesinde birleştirme dosyasını doğrudan da düzenleyebilirsiniz. Geçerli dosyadaki tüm birleştirme çakışmalarını çözümledikten sonra Birleştirmeyi Kabul Et'i seçin. İçerik çakışmaları olan her dosya için bu adımı yineleyin.

    Visual Studio'daki birleştirme düzenleyicisinin ekran görüntüsü.

  4. Bir dalda düzenlenen ve diğer dalda silinen bir dosya için, dosyaya sağ tıklayın ve istediğiniz dal eylemini seçin.

    Visual Studio'nun Git Değişiklikleri penceresinde çakışan bir dosyanın bağlam menüsünün ekran görüntüsü.

  5. Git Değişiklikleri penceresinde bir işleme iletisi girin ve tüm dosyalar için tüm birleştirme çakışmalarını çözümledikten sonra birleştirmeyi tamamlamak için İşleme Aşamalı'yı seçin.

    Visual Studio'nun Git Değişiklikleri penceresindeki işleme iletisinin ve İşleme Aşamalı düğmesinin ekran görüntüsü.

Sonraki adımlar