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

  • Fullscreen

    Fullscreen

    23 Mart 2006
  • nemoking of kinges

    nemoking of

    4 EYLÜL 2009
  • TheSalband Rai

    TheSalband R

    11 NİSAN 2011