GitHub / BitBucket'ta birleştirme-işleme cehennemi nasıl önlenir


101

Depomuzda bunun gibi birçok işlemle sonuçlanıyoruz:

Merge branch 'master' of bitbucket.org:user/repo

Bu, bir geliştiricinin yerel çatalını üst düzey depoya her senkronize ettiğinde gerçekleşir.

Bu birleştirme-kesinleştirme cehenneminin tüm repo günlüğünü karıştırmasını önlemenin bir yolu var mı? Bir şekilde çekme isteklerini başlatırken bunlardan kaçınılabilir mi?

Bu yalnızca yerel sanal makinemde yapılırsa git rebase yapabileceğimi biliyorum, GitHub / BitBucket kullanıcı arayüzünde herhangi bir eşdeğerlik var mı?

Bunu nasıl yapıyorsunuz?

Yanıtlar:


137

Birleştirmeden Önce Özellik Dallarını Yeniden Sunun

Birleştirme işlemlerinden kaçınmak istiyorsanız, tüm taahhütlerin hızlı ilerletildiğinden emin olmanız gerekir. Bunu, özellik dalınızın böyle bir birleşmeden önce geliştirme hattınıza temiz bir şekilde yeniden bağlanmasını sağlayarak yaparsınız:

git checkout master
git checkout -b feature/foo

# make some commits

git rebase master
git checkout master
git merge --ff-only feature/foo

Rebase'de ayrıca, bayrakla etkileşimli yeniden oluşturma dahil olmak üzere birçok -ibayrak vardır, ancak işleri olabildiğince basit tutuyorsanız ve tüm şube geçmişinizi birleştirme işleminde korumak istiyorsanız buna ihtiyacınız olmayabilir.

--ff-onlyBayrağı Kullanın

Yeniden oluşturmanın yanı sıra, --ff-onlybayrağın kullanımı yalnızca ileri sarma işlemlerine izin verilmesini sağlayacaktır. Bunun yerine bir birleştirme taahhüdü olacaksa, kesinleştirme yapılmayacaktır. Git-merge (1) kılavuz sayfası şunu söylüyor:

--ff-only

Mevcut HEAD zaten güncel değilse veya birleştirme hızlı ileri sarma olarak çözülemiyorsa, sıfır olmayan bir durumla birleştirmeyi ve çıkmayı reddedin.


1
Bu harika bir cevap. Rebase'i olabildiğince sık kullanıyorum. Yine de yalnızca -f-bayrağını bilmiyordum. Oldukça havalı!
Leo Correa

3
Rebase ve --ff-only tavsiyeler için teşekkürler. Ancak sorumda da söylediğim gibi, bunu GitHub / BitBucket arayüzünde nasıl yapabilirim?
Niklas9

3
@Niklas İstediğinizi yapmak için CLI'ye başvurmanız gerekeceğinden oldukça eminim. GitHub, Git'in tüm gücünü ortaya çıkarmaz; yalnızca özelliklerinin bir alt kümesi artı bazı grafiksel ve sosyal ağ katma değeri. İyi şanslar!
Todd A. Jacobs

3
Bu işlemle ilgili unutulmaması gereken bir nokta, konu dalını (özellik / foo) ana dalla birleştirmeden önce, ana dalın güncel olduğundan emin olmak için kaynak ana yöneticiyi (bir uzaktan kumanda kullanıyorsanız) daha iyi çekmenizdir. . Güncellemeler bulunursa, ana başlığı tekrar birleştirmeden önce ana başlığı konu dalına yeniden sıraladığınızdan emin olun.
chikamichi

19
@CodeGnome buna CLI'ye "başvurmak" demiyor ... gerçekte kullanıcı arayüzüne "başvurma" konusunda uyarıda bulunmalısınız!
Droogans

10

"Todd A. Jacobs" daha önce bahsedilen "rebase" buradaki kavramdır. Bu, işleri yapmanın daha ayrıntılı bir yoludur.

Diyelim ki ana dalındasınız

$ git branch
  * master

Bir düzeltme yapmak istiyorsunuz, bu nedenle ana makineden dallanmış bir "düzeltme dalı" oluşturun

$ git checkout -b fixbranch

Belki bu şubede birkaç gün çalışıp, birkaç işin vardı.

Taahhütlerinizi merkezi ana depoya itmek istediğiniz gün! Ödeme ana ve en son değişiklikleri merkezi ana depodan alın

$ git checkout master
$ git pull origin master

Temiz bir geçmişe sahip olmak ve yerel deponun kendisinde varsa çakışmaları çözmek için onarım dalınızı ana ile yeniden başlatın.

$ git checkout fixbranch
$ git rebase master

Şimdi fixbranch, merkezi master ile güncel, fixbranch'ı ana dalla birleştirmeme izin verin

 $ git checkout master
 $ git merge fixbranch

Bitirdim! yerel efendiyi merkez efendiye itmeme izin ver

$ git push origin master

https://git-scm.com/book/en/v2/Git-Branching-Rebasing

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.