Nasıl kiraz işleyen bir dizi almak ve başka bir şube birleştirmek | Netgez.com
SORU
3 Ocak 2010, Pazar


Nasıl kiraz işleyen bir dizi almak ve başka bir şube birleştirmek

Aşağıdaki depo düzeni var:

  • ana Dalı (üretim)
  • entegrasyon
  • çalışma

Elde etmek istediğim kiraz çalışma şubesinden işleyen bir dizi seç ve Birleştir entegrasyon şube içine. Ben oldukça yeni gıt ve tam olarak bu bir operasyon değil, birleşme olarak kaydetme aralığı kiraz toplama) nasıl yapacağımı çözemiyorum depo bozmadan. Bu konuda herhangi bir tavsiye ya da düşünceler? Teşekkürler!

CEVAP
3 Ocak 2010, Pazar


İşleyen bir dizi olunca, seçmekoldupratik değil.

Keith Kim, Git 1.7.2 mentioned below cherry-pick tamamlar (ama hala consequence of cherry-picking for future merge farkında olmak gerekir) bir dizi için yeteneği tanıttı

git cherry-pick" işleyen bir dizi seçmek için öğrendim
("cherry-pick A..B" ve"; bunlar desteklemez güzel sıralama kontrol "rebase [-i]". "git revert yaptım "cherry-pick --stdin"), örneğin

damian comments ve bizi uyarıyor:

"cherry-pick A..B" formA B daha büyük olmalıdır.
Eğer yanlış sipariş alıyorlar eğer komutu sessizce başarısız olur.

Eğer almak istiyorsanızD (dahil) arasında Bo olurduB^..D.
Bakın "Git create branch from range of previous commits?" bir örnek olarak.

Jubobs olarak bahseder in the comments:

Bu B bir kök işlemek değildir; "unknown revision" hata yoksa. bir alırsınız varsayar


Cevap (Ocak 2010) orijinal

rebase --onto bir entegrasyon Şubesi, Charles Bailey described here gibi üstüne tekrar kaydetme belirli bir aralık nerede daha iyi olurdu.
(ayrıca, "Burada konu bir şube nakli nasıl olur" git rebase --onto pratik bir örnek görmek için git rebase man page) . başka bir şube dayanarak arayın

Mevcut ÅŸube ise entegrasyon:

# Checkout a new temporary branch at the current location
git checkout -b tmp

# Move the integration branch to the head of the new patchset
git branch -f integration last_SHA-1_of_working_branch_range

# Rebase the patchset onto tmp, the old location of integration
git rebase --onto tmp first_SHA-1_of_working_branch_range~1 integration

Her şey arasında yeniden:

  • first_SHA-1_of_working_branch_range (dolayısıyla ~1) üst sonra: ilk yeniden istediÄŸiniz tamamlama
  • "integration" son için working ÅŸube yeniden göndermek istediÄŸiniz commit)

"tmp" integration nereyi önce puan)

Eğer bunlardan birini işlerken, herhangi bir çatışma varsa tekrarlanmış

  • bunu çözmek ve çalıştır "git rebase --continue". ya
  • ya bu yama atlayın ve bunun yerine run "git rebase --skip"
  • ya da her ÅŸeyi iptal et "git rebase --abort" (tmp ÅŸube integration ÅŸube yerine koy)

rebase --onto, integration son entegrasyon şube tamamlama geri ("tmp" tüm tedbirleri tamamlar şube) . olacak bundan sonra

Ya rebase --onto, unutma seçmek sonraki birleştirir sonuçları, described here gibi.


Bir "cherry-pick" çözüm discussed here ve bir şey gibi içerecektir: . saf

Eğer yama bir yaklaşım kullanmak istiyorsanız, o zaman "format-patch|git" ve "git kiraz" seçenekler. gıt
Şu anda, git cherry-pick sadece tek bir taahhüt kabul eder, ama eğer D 34 ** menzil almak istersen git lingo B^..D, o kadar olur

git rev-list --reverse --topo-order B^..D | while read rev 
do 
  git cherry-pick $rev || break 
done 

Ama yine de, "yeniden" işleyen bir dizi, "sen" kelimesinirebase "Gıt özelliği. kullanımı için zorlamalıyız" tekrar ihtiyacınız olduğunda

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • ghosti66

    ghosti66

    27 AÄžUSTOS 2006
  • Truc Minh

    Truc Minh

    23 Ocak 2011