Master ve geliştirme dalları arasında “git pull” veya “git merge”


243

Benim sahip masterşube ve developbirkaç değişiklik üzerinde çalışmak için şube. Ben gelen değişiklikleri birleştirmek gerekir masteriçine develop, ama sonunda her şeyi birleştirir developiçine master. İki farklı iş akışım var:

  1. git pull origin masteriçine developdal
  2. git merge masteriçine developdal

Bunu yapmanın en iyi yolu hangisi ve neden?



2
git pull= git fetch+git merge FETCH_HEAD
Yousha Aleayoub

Yanıtlar:


104

Rebase'e dikkat et. Geliştirme şubenizi herhangi biriyle paylaşıyorsanız, rebase bazı şeyleri karıştırabilir. Rebase sadece kendi yerel şubeleriniz için iyidir.

Temel kural, şubeyi başlangıç ​​noktasına ittiyseniz rebase kullanmayın. Bunun yerine birleştirme kullanın.


Yine de git push origin rebasedBranch --forceözel bir repoda yeniden pazarlık yapmak güvenli midir? Tek kullanıcı benim.
k0pernikus

Evet, tek kullanıcıysanız, elbette güvenlidir. Git push --force'u tek kullanıcı olduğum zaman kullanıyorum. :)
Tyler Rick

3
Eric'in uyarısını tekrarlıyorum. Yine de, kendi uzak dalınızı da yeniden birleştirmek mükemmeldir. Hem rebase hem de birleştirme ile oynayın ve her birinin artılarını ve eksilerini anlayacak ve bunları ne zaman kullanacağınızı öğreneceksiniz.
Ian Lotinsky


@IanLotinsky bağlantınız rebase ile ilgili bir makaleye işaret etmiyor. Longshot, ancak hala doğru bağlantınız var mı? :)
Daniel Serodio

347

Bu iş akışı benim için en iyi sonucu veriyor:

git checkout -b develop

... bazı değişiklikler yapın ...

... ihbar yöneticisi güncellendi ...

... geliştirmek için değişiklikler yapın ...

git checkout master
git pull

... bu değişiklikleri tekrar geliştirin ...

git checkout develop
git rebase master

... daha fazla değişiklik yapın ...

... geliştirmelerini taahhüt ediyoruz ...

... onları ustalıkla birleştirin ...

git checkout master
git pull
git merge develop

2
Ben de böyle çalışıyorum ve işe yarıyor. Yine de yapmadığım bir şey var ve bu git pullfinalden hemen önce git merge develop. Bunun amacı ne?
crdx

... bildirim yöneticisi güncellendi ... bölümünde, ödeme yöneticisi bunları taahhüt etmezseniz geliştirmek için yerel değişikliklerinizi silmez mi?
a1an

1
@ a1an Hayır, ancak taahhütte bulunmazsanız değişiklikler ana şubeye taşınır ve git taahhüt edilene kadar çekmenize izin vermez.
elemjay19

5
@crdx Büyük olasılıkla, şubenizi yerel yöneticinizle birleştirmeden önce diğer şubelerin uzak yöneticiyle birleştirilmesidir. Uzak ana değişiklikleri alıp yerel ana kopyasına getirirsiniz. Ben böyle anladım.
Tarun

12
git pull --rebase origin mastergeliştirme dalında biraz daha hızlı.
Nathan Lilienthal

24

Bu tür şeyler için en iyi yaklaşım muhtemelen git rebase. Değişiklikleri master'dan geliştirme dalınıza çekmenize izin verir, ancak tüm geliştirme çalışmalarınızı master'dan gelen şeylerin üstüne (daha sonra taahhüt günlüğüne) bırakın. Yeni işiniz tamamlandığında, ustaya geri dönüş çok basittir.


10
İyi tavsiye, developbaşka kimseyle paylaşılmadığını varsayarsak .
Karl Bielefeldt

1
@KarlBielefeldt Diğer katılımcılar ile develop paylaşılırsa , developbazı düzeltmeler doğrudan aktarıldığında nasıl güncelleniriz master? Birleştirme yapmalı mıyız, yani git checkout master && git pull --rebase && git checkout develop && git merge master? Yukarıda en yüksek oyu alan cevaba bir yorum bıraktım.
Aralık'taki modüller

5

Eğer geliştirme dalını kimseyle paylaşmıyorsanız, o zaman master her güncellendiğinde yeniden temellendiririm, bu şekilde tekrar master'a dönüştüğünüzde tarihinizin her yerinde birleştirme taahhütleriniz olmaz. Bu durumda iş akışı aşağıdaki gibi olacaktır:

> git clone git://<remote_repo_path>/ <local_repo>
> cd <local_repo>
> git checkout -b develop
....do a lot of work on develop
....do all the commits
> git pull origin master
> git rebase master develop

Yukarıdaki adımlar, geliştirme dalınızın her zaman ana daldaki en son değişikliklerin üstünde olmasını sağlayacaktır. Geliştirme dalını bitirdikten ve master'daki en son değişikliklere geri döndüğünde, onu geri birleştirebilirsiniz:

> git checkout -b master
> git merge develop
> git branch -d develop

1

benim başparmak kural:

rebaseolan branşlar için aynı adı , mergeaksi.

aynı isimler için örnekler master, origin/masterve olacaktır otherRemote/master.

eğer developsadece yerel depo var ve her zaman bir son dayanmaktadır origin/mastertaahhüt, bunu çağırmalıdır masterve doğrudan oraya çalışması. hayatınızı kolaylaştırır ve şeyleri gerçekte oldukları gibi sunar: doğrudan masterdalda gelişiyorsunuz .

eğer developpaylaşılır, üzerinde rebased edilmemelidir mastersadece ile onun içine geri birleşti, --no-ff. üzerinde gelişiyorsun develop. masterve developfarklı isimlere sahipler, çünkü onların farklı şeyler olmasını ve ayrı kalmasını istiyoruz. ile aynı şeyi yapmayın rebase.

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.