2011-06-23 26 views
5

Çok kafam karıştı, birkaç yazı, blog ve makale okudum ve nereye gideceğini bilmiyorum. Git svn ile aşağı çekmek ve üzerinde çalışıyorum bir svn sunucu repo kullanıyorum. Şu anda bunu geliştiren tek kişi benim (diğer bir deyişle yukarı akış değişiklikleri).git merge vs rebase kullanarak git svn

Bu yüzden yerel bir üye konu şubem var vacation, hangi dcommit için ana içine birleştirmek gerekir, ama tüm taahhütleri bir büyük bir içine squash istemiyorum.

Git rebase -i master'u denedim ve değişikliklerin% 90'ını sildim.

i

git checkout master 
git rebase vacation 
git svn docmmit 

Veya

git checkout vacation 
git rebase master 
git checkout master 
git merge vacation --ff-only 
git svn docmmit? 

Birisi kısaca ne yapmam gerektiğini açıklayınız olabilir i önce çalıştığınızda ne olduğunu b/c bu şekilde korkuyorum ve do neden böyle yapmak zorundayım?

cevap

4

Sanırım bunu anladım.

git checkout vacation 
git rebase master 
[ masters's chages put behind this branches, replay every commit ] 
git checkout master 
git merge --ff-only vacation 
git svn dcommit 
[ each change goes into svn as seperate commit ] 

hiçbir üst düzey değişiklikleri vardı, ama bu ı istedikleri şeydi.

+1

Evet, bu yapmak için doğru şey. –

3

Master'ı yeniden donatmamak için birleştirmelisiniz veya kiraz almalısınız.

Neden olduğu için, onun bir sipariş sorusu. Rebase, konu dalınızın geçmişte usta olmadan görünmesini sağlamak için geçmişi değiştirmek istediğinizi ima eder. Eğer birleşme veya kiraz toplama işlerini yaparsanız, o zaman taahhütlerinizi master'in üzerine ekleyecektir.

Yani tam bir döngü benim kişisel kurulumdan daha tam bir örnek rebase açıklamak için

git checkout -b vacation 
[make changes] 
git commit -a -m "Commit message" 
git checkout master 
git merge vacation 
git svn dcommit 

gibi bir şey olacaktır: Ayrıca Ben de için üs olarak kullanmak yerel şube çalışmalarını sürdürmek master benim projenin yerel konfigürasyonu. Hiç yapmak istemediğim özel mülkiyet dosyaları gibi şeyler var.

git svn rebase 
git checkout work 
git rebase master 

Şimdi git yığının başında taahhüt tüm yerel yapılandırma yerleştirerek çalışma dalının tarihini yeniden yapılandırır: Bu ustadan başlayan yüzden ben ana şube ile senkronize kalmalı. Ana daldaki BASEd dalını litterally RECreat. Ben rebasing yerine

git merge master 

sorunu olsaydı o zaman lamen göze sonuç aynı olacaktır ama tarih gerçekten çok farklı olurdu. İki tarih çözülecek, muhtemelen bir diğerinin üstüne dayalı yerine birleşme taahhütlerine yol açacaktı.

+0

kim düşürdü, neden açıklayabilirler? – loosecannon

+0

da düzenleme yapar, Ne istediğimi, bu yüzden ben svn anlar ve birleştirme taahhüt eder bir lineer tarih var – loosecannon

İlgili konular