2013-11-03 22 views
19

Çektiğim ve dallandığım bir uzak depom var. Master için yapılan değişikliklerle yeni şubeyi güncel tutmak istiyorum. Aşağıdaki iş akışını düşünüyorum, mantıklı mıdır yoksa bunu yapmanın daha iyi yolları var mı?Bir şubeyi ana sayfa ile güncel tutulması

  1. İlk dallanma ve ödeme:

    git checkout master 
    
    git pull 
    
    git checkout -b my_branch 
    
  2. sonra periyodik olarak, my_branch bazı iş yap:

    git checkout master 
    
    git pull 
    
    git checkout my_branch 
    
    git merge master --no-ff 
    

tekrarlayın 2. adımı gerektiği gibi, periyodik itişlerle Uzak my_branch. Sonra

hazır olduğunda geri birleştirmek için:

git checkout master 

git merge my_branch --no-ff 

Ses tamam mı?

cevap

16

Sen komutları kolaylaştırabilirsiniz:

1.

git fetch 
git checkout -b my_branch origin/master 

2.

git fetch 
git merge origin/master 

git fetch uzak dalları günceller, genellikle olması gerek yoktur olmayan bir şubenin yerel bir kopyası bu dalda çalışmayı planlamak.

git config --global merge.ff false ayarlandıktan sonra --no-ff'u atlayabilirsiniz.

git help config diyor ki:

merge.ff 
     By default, Git does not create an extra merge commit when merging 
     a commit that is a descendant of the current commit. Instead, the 
     tip of the current branch is fast-forwarded. When set to false, 
     this variable tells Git to create an extra merge commit in such a 
     case (equivalent to giving the --no-ff option from the command 
     line). When set to only, only such fast-forward merges are allowed 
     (equivalent to giving the --ff-only option from the command line). 

git pullgit fetch ve git merge sadece bir kombinasyonudur unutmayın.

Genellikle git pull --rebase genellikle git fetch artı git rebase olan ve daha temiz bir tarih oluşturur.

"Periyodik itmeler" inizin bir sebebi var mı? Aynı dalda hiç kimse çalışmazsa, her şeyi bitirdikten sonra itmek için gayet iyi olacaktır.

+0

(ve Christoph'un) cevabınız için teşekkürler. Sorunuzu cevaplamak için, kutumun ölmesi durumunda periyodik olarak itirazda bulunmanın bir sebebi yok. Ve eğer birisi kodumun kendi işlerini yapmasını istiyorsa - tamamen benim için değil, benim kodumun ustalaşmasına kadar, artı bir kamu dalında bir rebase yapmak sorun yaratabilir, bu yüzden anlıyorum (ama neden tam olarak emin değilim) .) – larryq

+1

rebases iki ucu keskin bir kılıçtır. Bir yandan çoğu zaman çok daha net bir tarihe yol açarlar. Diğer taraftan, temel olarak eski içerikle tamamen yeni taahhütler yaratırlar. İşlemlerinizi zorlarsanız, başka biri bu kuramlarda kendi değişikliklerini kurabilir (teorik olarak). Daha sonra taahhütlerinizi yeniden düzenlemeye karar verirseniz, eski işlemleri ve bunlara dayanan tüm değişiklikleri geçersiz kılarsınız. - Eski şubenizi kaldırsanız bile, diğeri de değişikliklerine yol açabilir ve bu nedenle eski değişikliklerinizi zorlayabilir, bu da yinelenen taahhütlere ve sonuçta ortaya çıkan karışıklıklara neden olur. :) – michas

+1

Yine, çok teşekkürler. Ben 'git çekme - rebel' hakkında okumaya devam ediyorum ve eğer şu anda (mybranch') derken, ne olursa olsun% 100'lük bir şey yapıyorum. Bu durumda, komut 'my_branch' uzaktan kumandanından çeker ve ardından hangi dalı ...? Komutada herhangi bir yerde bahsetmediğim için usta olmazdı. Bu yüzden, her zaman iki ayrı dalı yeniden doğduğumdan beri bana biraz tuhaf gelen "my_branch" a karşı rebasing olmalı. Ama sanırım mümkün ve şimdi düşünüyorum, neden olmasın? – larryq

8

Bir rebase iş akışı kullanmasını öneriyorum. Yani git pull kullanmak yerine git pull --rebase kullanmalısınız.

Özellik dalında da aynısını yapardım. Yani bir git merge master --no-ff yapmak yerine git rebase master kullanırdım. Bununla birlikte, özellik dalı, geliştirme sırasında birlikte çalışanlarla paylaşılmak isteniyorsa, ana branşmayı periyodik olarak özellik dalına birleştirmek daha iyidir.

Ama dürüst olmak gerekirse, küçük bir ekip üzerinde çalışıyorum ve eğer bir özellik dalında birlikte çalışmamız gerekiyorsa ve bunu ustalıkla güncellememiz gerekiyorsa o zaman işimizi kısa bir süre için askıya alıyoruz (ve süreç açıkça), master yeniden zorlamak ve özellik dalını zorlamak. Ama evet, bu büyük takımlar için ölçeklendirilmez. Bununla birlikte, usta birleştirme ile uğraşmak yerine, ustalıkla yeniden işlenen bir özellik dalı ile çalışmanın daha uygun olduğunu düşünüyorum.

Bunu okuduğunuzdan emin olun.

Git workflow and rebase vs merge questions

İlgili konular