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
İş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 B
o 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çinworking
ş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
ÅŸubeintegration
ÅŸ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ğerD
34 ** menzil almak istersen git lingoB^..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
Nasıl git başka bir şube için işleyen ...
Nasıl Gıt mevcut şube adı almak için?...
Nasıl başka bir dizi ile mevcut JavaSc...
Nasıl bir şube sadece bir dosya almak ...
Nasıl Ruby başka bir dizi için bir diz...