Git, bir dizi dosyada yapılan değişiklikleri izlemek veya zaman içinde işleri koordine etmek için dağıtılmış bir sürüm kontrol sistemidir. Programcılar tarafından yazılım kaynak kodundaki ve en iyi bölümdeki değişiklikleri koordine etmek için sıklıkla kullanılır; her türlü içeriği izlemek için kullanılabilir. Küçükten büyük hacimli projelere kadar her şeyi en üst düzeyde hız ve verimlilikle ele almak için özel olarak tasarlanmıştır. Bireylerin işleri doğrudan kişisel depoları arasında paylaşabileceği ve grupların iş akışını merkezi bir depo aracılığıyla koordine edebileceği anlamına gelen son derece esnektir. İki farklı yerde oturan iki geliştiricinin, hepsi merkezi bir depo olmadan bağımsız olarak değişiklik yapmasına ve kaydetmesine izin verir..
Birleştirme, Git'te bir daldan diğerine değişiklikleri entegre etmek için kullanılan yaygın bir uygulamadır. Git birleştirme, başka bir konumda değişiklik yapan bir komuttur. Geliştiricilerin Git dalı tarafından oluşturulan bağımsız kod satırlarını almasını ve bunları tek bir dala entegre etmesini sağlar. Bu yalnızca hedef dalı değiştirirken kaynak dalın geçmişi kalır. Git rebase, temelde aynı amaç için kullanılan başka bir komut. Her ikisi de aynı şeyi yapar - bir daldan diğerine taahhütleri dahil eder - ancak fark, bunu nasıl yaptıklarıdır. İkisini karşılaştıran bazı önemli ayırt edici noktaları vurguluyoruz.
Git birleştirme, iki veya daha fazla tamamlama geçmişi dalını birleştiren bir komuttur. Birleştirme genellikle yalnızca iki dalı birleştirir, ancak Git aynı anda üç, dört veya daha fazla dalı birleştirmeyi destekler. Git birleştirme Git pull tarafından bir koldan diğerine veya başka bir havuzdaki değişiklikleri bir araya getirmek için kullanılır. Birleştirme tek bir havuzda gerçekleşmelidir, yani birleştirilmesi gereken tüm dallar aynı depoda bulunmalıdır. Birleştirme durumları genellikle ortak kodu güncellemeye çalışan iki veya daha fazla kullanıcıdan kaynaklanır. En yaygın olarak, bir kullanıcı bir şubeyi yerel bir ortamda kendi yerel havuzundaki başka bir dalla birleştirir. Git birleştirme özel olarak bir kaynak dalın içeriğini bir hedef dalla bütünleştirir. Hedef dal değiştirilirken, kaynak dal kalır.
Git rebase, başka bir dalı şu anda çalıştığınız dalla tümleştirmek için kullanılan birleştirme işlemine başka bir alternatiftir, ancak doğrusal bir taahhüt geçmişi tutar. Git rebase'in amacı bir şubeyi bir konumdan diğerine taşımaktır. Taahhütler değişmez olduğundan, taşınamazlar, bu nedenle aynı değişiklik kümeleri ve meta verilerle yeni taahhütler yapılmasını gerektirir. Bir rebase, bir dizi taahhüdün ne zaman ve nerede geliştirildiği fikrini temelden değiştirir, bu da geliştirme tarihinin bazı yönlerinin kaybolmasına neden olur. Bu, geliştirmenin başlangıçta dayandığı orijinal taahhüdün değiştirileceği anlamına gelir. Tarihi yeniden yazarak ana daldaki tüm yeni taahhütleri etkili bir şekilde birleştirir. Sonuç olarak, orijinal şubedeki her taahhüt için yeni taahhütler yaratır.
- Her ne kadar, hem birleştirme hem de yeniden pazarlama Git'teki değişiklikleri entegre etmenin en yaygın yollarıdır ve aynı amaca hizmet ederler - birden çok dalı bir araya getirmek - fark, nasıl başardıklarında yatmaktadır. Git birleştirme, bir kaynak dalın içeriğini bir hedef dalla birleştirirken, her taahhüt geçmişinin soyunu korurken, Git rebase ana daldaki tüm yeni taahhütleri, kaynak daldaki her bir taahhüt için yeni taahhütler oluşturarak yeniden yazarak birleştirir..
- Git birleştirme ile önce birleştirilecek şubeye geçersiniz ve daha sonra birleştirilecek bir dal seçmek için birleştirme komutunu kullanırsınız. Bir dalın bir taahhüdü işaret ettiği ve bir taahhüdün değişikliklerle ilişkilendirdiğiniz ayrıntı düzeyi olduğu, birleştirme komut şube veya taahhüt düzeyinde birleşir. Diğer taraftan Rebase biraz farklı. Önce yeniden oluşturmak için bir dal seçin ve sonra nereye koyacağınızı seçmek için rebase komutunu kullanın.
- Birleştirme, iki dal arasındaki birleşmeyi temsil eden yeni bir taahhüt oluşturur. Birleştirme taahhüdü oluşturarak farklı paralel gelişim hatlarından (dallardan) meydana gelen değişiklikleri bir araya getirir. Amaç, mevcut dalda sapma noktasından bu yana yapılan tüm değişiklikler dahil olmak üzere iki veya daha fazla şubeyi birleştirmektir. Hızlı ileri git, Git'teki varsayılan birleştirme davranışıdır. Yeniden yapılandırma, orijinal branştaki her taahhüt için yeni taahhütler oluşturarak proje geçmişini yeniden yazarak bireysel taahhütleri değiştirir ve bu da farklı dallar olmaksızın doğrusal tarihle sonuçlanır.
- Git birleştirme geçmişi değiştirmezken, dalın içeriği korunarak mevcut dalların hiçbir şekilde değişmediği anlamına gelir. Yeni bir taahhüt yaratır (hızlı ileri bir birleştirme olmadıkça), ancak taahhütlere şubeden erişilebilir. Git rebase, potansiyel olarak karmaşık bir geçmişi kolaylaştırır. Taahhütler yeniden yazılır, eski sürümler unutulur ve revizyonların DAG'ı değiştirilir. Taahhütlere artık rebase ile ulaşılamıyor, yani artık yayınlanan şubeleri yeniden oluşturamazsınız.
Özetle, hem birleştirme hem de yeniden pazarlama Git'e değişiklikleri entegre etmenin iki yoludur, ancak bunu nasıl yaptıkları konusunda farklılık gösterirler. Birleştirme, çatışmaları çözmek için tek bir yeri olan ve şubeden erişilebilen taahhütlere ulaşılabilen tek adımlı bir işlemdir. Diğer taraftan, Rebase, kaynak daldaki her bir taahhüt için yeni taahhütler oluşturarak geçmişi yeniden yazarak her bir taahhüdü ayrı ayrı yeniden uygular. Yani, bir zamanlar ulaşılabilir olan şey artık ulaşılamaz. Rebase, bir dizi işlemin ne zaman ve nerede geliştirildiği fikrini temelden değiştirir.