Konu Çözümü
Gönderilen soruyu cevaplamak için doğru komut aşağıdakilerden herhangi biri olabilir (şubenin topiczaten teslim alınmış olduğu varsayılarak ):
git rebase --onto B master
git rebase --onto master~1 master
git rebase --onto B A
git rebase --onto B C
git rebase --onto B
Eğer topicteslim edilmez, sadece ekleme topic(sonuncusu hariç) komutuna şöyle:
git rebase --onto B master topic
Alternatif olarak, ilk önce şubeye göz atın:
git checkout topic
Herhangi Bir Taahhüt Dizesini Hedef Taahhütüne Rebase
Belgelere atfedilen, ihtiyacımız olan komutun temel formu:
git rebase --onto <Target> [<Upstream> [<Branch>]]
<Branch>isteğe bağlıdır ve tüm yaptığı komutun geri kalanını çalıştırmadan önce belirtilen dalı denetler. Rebase yapmak istediğiniz şubeyi daha önce kontrol ettiyseniz, buna ihtiyacınız yoktur. <Upstream>Belirtmek için belirtmiş olmanız gerekir, <Branch>yoksa git belirttiğinizi düşünecektir <Upstream>.
<Target>taahhütler dizimize ekleyeceğimiz taahhüt. Bir şube adı verirken, o şubenin ana taahhütlerini belirlersiniz. <Target>taşınan taahhüt dizesinde bulunmayacak herhangi bir taahhüt olabilir. Örneğin:
A --- B --- C --- D master
\
\-- X --- Y --- Z feature
Tüm özellik dalı taşımak için, seçemezsiniz X, Y, Z, veya featureolduğu gibi <Target>bu yana tüm taşınıyor grup içinde kaydedilmesini vardır.
<Upstream>özeldir çünkü iki farklı anlama gelebilir. Teslim edilen dalın atası olan bir taahhüt ise, o zaman kesme noktası olarak hizmet eder. Ben sağlanan örnekte, bu değil bir şey olurdu C, Dya da master. Teslim <Upstream>edilen şubenin başı taşınacak olana kadar tüm taahhütler .
Ancak, <Upstream>bir ata değilse , git, teslim alınmış dalda ortak bir ata bulana kadar (ve eğer bulamazsa iptal edilir), zinciri belirtilen işleme göre yedekler. Bizim durumumuzda, bir In <Upstream>ait B, C, Dya masterolacak işlemek tüm sonuç Bkesim noktası olarak hizmet veren. <Upstream>kendisi isteğe bağlı bir komuttur ve belirtilmezse, git kullanıma alınan dalın üst kısmına bakar ve bu da girmeye eşdeğerdir master.
Git, keseceği ve taşıyacağı taahhütleri seçtiğine göre, bunları <Target>hedefe uygulanmış olanları atlamak için uygular .
İlginç Örnekler ve Sonuçlar
Bu başlangıç noktasını kullanarak:
A --- B --- C --- D --- E master
\
\-- X --- Y --- Z feature
git rebase --onto D A feature
Kaydedilmesini geçerli olacaktır B, C, X, Y, Zişlemeye Dve atlama sonunda Bve Conlar zaten uygulanmış çünkü.
git rebase --onto C X feature
Taahhütleri uygular Yve Ztaahhüt eder C, taahhütleri etkili bir şekilde silerX
git checkout Bönce yapmayı denedingit rebasemi?