Konu Çözümü
Gönderilen soruyu cevaplamak için doğru komut aşağıdakilerden herhangi biri olabilir (şubenin topic
zaten 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 topic
teslim 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 feature
olduğ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
, D
ya 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
, D
ya master
olacak işlemek tüm sonuç B
kesim 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
, Z
işlemeye D
ve atlama sonunda B
ve C
onlar zaten uygulanmış çünkü.
git rebase --onto C X feature
Taahhütleri uygular Y
ve Z
taahhüt eder C
, taahhütleri etkili bir şekilde silerX
git checkout B
önce yapmayı denedingit rebase
mi?