Kısaca belirtmek gerekirse:
Before rebase After rebase
A---B---C---F---G (branch) A---B---C---F---G (branch)
\ \ \
D---E---H---I (HEAD) \ E'---H' (HEAD)
\
D---E---H---I
git rebase --onto F D H
Hangisi ile aynı (çünkü --ontobir argüman alır):
git rebase D H --onto F
Rebase, F'nin üstündeki aralık (D, H) olarak çalışır, aralığın soldan özel olduğuna dikkat edin.Özeldir çünkü örn.branch izin gitdan taahhüt ayrıldığı 1st bulmak branchyani Dhangi potansiyel H.
OP davası
o---o (A)
\
o (B)(HEAD)
git checkout B
git rebase --onto B A
Tek komutla değiştirilebilir:
git rebase --onto B A B
Burada hataya benzeyen şey, yerleşimin B" Büstte şubeye yol açan bazı taahhütleri taşı" anlamına gelir B. Sorular "bazı taahhütlerin" ne olduğudur. Eğer eklerseniz -ibayrağı bunu tarafından işaret kesinleştirme bekar göreceksinizHEAD . Taahhüt atlanır, çünkü zaten --ontohedefe uygulanır Bve böylece hiçbir şey olmaz.
Şube adının bu şekilde tekrarlandığı her durumda komut saçmadır. Bunun nedeni, taahhütlerin aralığının o dalda bulunan bazı taahhütler olması ve rebase sırasında hepsinin atlanmasıdır.
Daha fazla açıklama ve uygulanabilir kullanımı git rebase <upstream> <branch> --onto <newbase>.
git rebase varsayılan.
git rebase master
Şunlardan birine genişler:
git rebase --onto master master HEAD
git rebase --onto master master current_branch
Rebase'den sonra otomatik ödeme.
Standart şekilde kullanıldığında, örneğin:
git checkout branch
git rebase master
Rebase en son yeniden temelli taahhüdüne geçtikten ve gitgeçtiğini fark etmeyeceksiniz ( geçmişe bakın ). 2. argüman taahhüt karma olduğunda ilginç olan nedirbranchgit checkout branchgit reflog bunun yerine şube adı rebase hala çalışır, ancak hareket ettirilecek bir şube yoktur, böylece taşınan şubeye teslim olmak yerine "müstakil HEAD" ile sonuçlanırsınız.
Birincil ayrıştırılmış taahhütleri atlayın.
masterİçinde --onto1 alınır git rebaseargüman.
git rebase master
/ \
git rebase --onto master master
Bu yüzden pratik olarak başka herhangi bir taahhüt veya şube olabilir. Bu şekilde, en son olanları alarak ve birincil ayrıştırılmış taahhütleri bırakarak rebase taahhütlerinin sayısını sınırlandırabilirsiniz.
git rebase --onto master HEAD~
git rebase --onto master HEAD~ HEAD # Expanded.
Tek tarafından sivri işlemek rebase Will HEADiçin masterve "müstakil HEAD" sonuna kadar.
Açık kontrollerden kaçının.
Varsayılan HEADveya current_branchargüman bağlamsal olarak bulunduğunuz yerden alınır. Bu yüzden çoğu insan yeniden temellendirmek istedikleri şubeye ödeme yapar. Ancak 2. rebase argümanı açıkça verildiğinde, rebase'i örtük bir şekilde iletmek için önce ödeme yapmanız gerekmez.
(branch) $ git rebase master
(branch) $ git rebase master branch # Expanded.
(branch) $ git rebase master $(git rev-parse --abbrev-ref HEAD) # Kind of what git does.
Bu, taahhütleri ve şubeleri herhangi bir yerden yeniden oluşturabileceğiniz anlamına gelir . Yani rebase sonra otomatik ödeme ile birlikte . Rebase temelli şubeyi yeniden oluşturmadan önce veya sonra ayrı ayrı kontrol etmeniz gerekmez.
(master) $ git rebase master branch
(branch) $ # Rebased. Notice checkout.