GIT'de 2 şubeyi birleştirme


132

GIT kullanmaya yeni başladım ve harika olduğunu düşünüyorum, ancak mergekomutun ne yaptığı konusunda biraz kafam karıştı .

Diyelim ki "A" şubesinde çalışan bir projemiz var.

Eve gidip bu şubede değişiklik yapıp "B" olarak kaydediyorum. Başka bir programcı "A" için değişiklikler yapar ve bunu "C" olarak kaydeder.

"B" ve "C" dallarını bir araya getirip değişiklikleri yeni bir dal olarak gerçekleştirmenin bir yolu var mı, "D" deyin?

Yoksa 'birleştirme' noktasını mı kaçırıyorum?


başka bir dalda 'değişiklikleri kaydetmeye' gerek yoktur. bir A ile çalışın ve sonra bu farklı
A'ları bir

Ben takip etmiyorum A yerel bilgisayarımda olurdu, dev1 bilgisayarında A'nın bir kopyasına ve dev2 de bilgisayarında A'nın bir kopyasına sahip olurdu. Her iki geliştirici de değişiklik yapıyor, bu değişiklikleri nasıl bir araya getirebilirim?
dotty

bkz. < kernel.org/pub/software/scm/git/docs/git-pull.html >. geliştiriciler muhtemelen havuzlarını önce bir yere
aktarmalı

Yanıtlar:


197

merge iki (veya daha fazla) dalı bir araya getirmek için kullanılır.

küçük bir örnek:

# on branch A:
# create new branch B
$ git checkout -b B
# hack hack
$ git commit -am "commit on branch B"

# create new branch C from A
$ git checkout -b C A
# hack hack
$ git commit -am "commit on branch C"

# go back to branch A
$ git checkout A
# hack hack
$ git commit -am "commit on branch A"

yani şimdi farklı kafalara sahip üç ayrı dal (yani AB ve C) var

B ve C'den A'ya yapılan değişiklikleri almak için, A'yı kontrol edin (bu örnekte zaten yapılmıştır) ve sonra birleştirme komutunu kullanın:

# create an octopus merge
$ git merge B C

öyleyse geçmişiniz şöyle görünecek:

…-o-o-x-------A
      |\     /|
      | B---/ |
       \     /
        C---/

Depo / bilgisayar sınırları arasında birleştirmek istiyorsanız, git pullkomuta bir göz atın , örneğin A şubesi olan bilgisayardan (bu örnek iki yeni işlem oluşturacaktır):

# pull branch B
$ git pull ssh://host/… B
# pull branch C
$ git pull ssh://host/… C

bu, her iki dalın da aynı kod parçasını değiştirdiği anlamına gelir. çatışmaları düzeltin git add conflicting_filesve sonragit commit
knittl

A'daki dosyanın "merhaba" kelimesini içerdiğini, A'nın "MERHABA" olarak değiştirdiğini ve B'nin "Merhaba dünya" olarak değiştirdiğini varsayalım. Bu dosyaları birleştirmenin sonucu ne olur?
dotty

Hay aksi, demek istediğim, B değiştirdi ve C değiştirdi.
dotty

Git'te farklı bir şey ifade eden 'değiştir' kelimesine dikkat edin (mevcut taahhütleri değiştirmek). Bir tarafta bir 'merhaba' dosyasını bir tarafta 'HELLO' ve diğer tarafta 'Merhaba Dünya' olarak değiştirmek bir birleştirme çakışmasına neden olacaktır
knittl

19
@dotty: Git genellikle sihir gibi görünse de, aslında zihninizi okuyamaz - iki dal aynı içerikte iki farklı değişiklik yaparsa, yalnızca bir insan bunları nasıl uzlaştıracağını anlayabilir. Birleşme çatışması budur.
Cascabel

48

İçinde birleştirme değişiklikleri isterseniz subbranch için MainBranch

  1. MainBranch'da olmalısın git checkout MainBranch
  2. sonra birleştirme komutunu çalıştırın git merge SubBranch

2
@luckytaxi: Kabul edildi, bazen daha azı daha fazladır
Marcelo Scofano

Bunu geri alabilir miyim?
Yohanelly

0

Durum: Varsayılan olarak oluşturulan birleştirme işlemini yok saymanız gerekirse , aşağıdaki adımları izleyin.

Diyelim ki, yeni bir özellik dalı, halihazırda 2 kaydetmesi olan ana bilgisayardan teslim alındı,

  • "A Eklendi", "B Eklendi"

Checkout a new feature_branch

  • "C Eklendi", "D Eklendi"

Özellik dalı daha sonra iki kaydetme ekler ->

  • "E Eklendi", "F Eklendi"

görüntü açıklamasını buraya girin

Şimdi, feature_branch değişikliklerini usta olarak birleştirmek istiyorsanız git merge feature_branch, Ana üzerinde oturun .

Bu, tüm işlemleri ana dala ekleyecektir (ana dalda 4 + öznitelik dalında 2 = toplam 6) + 'Merge branch 'feature_branch'ana birim ayrıldığında 'gibi ekstra bir birleştirme kesinleştirme .

Bu taahhütleri (FB'de yapılanlar) gerçekten göz ardı etmeniz ve feature_branch'da yapılan tüm değişiklikleri 'Integrated feature branch changes into master', Run git merge feature_merge --no-commit.

--No-commit ile, birleştirme işlemini gerçekleştirir ve bir birleştirme commit oluşturmadan hemen önce durur. Özellik dalındaki tüm ek değişiklikleri şimdi ana olarak yapacağız ve yeni bir commit yaratma şansımız olacak.

Daha fazlası için burayı okuyun: https://git-scm.com/docs/git-merge

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.