Yeniden temellendirme, taahhütleri başka bir temel gezinin üzerine yeniden uygulama sürecidir. Farklı dallardan gelen bir dizi işlemi nihai bir işleme uygulamak için kullanılır. git merge komutunun bir alternatifidir. Bu doğrusal bir birleşme sürecidir.
Git'te rebase terimi, bir dizi taahhütün yeni bir temel taahhüde taşınması veya birleştirilmesi süreci olarak anılır. Yeniden temellendirme çok faydalıdır ve süreci, dallara ayrılan bir iş akışı ortamında görselleştirdi.
Şubenizi birleştirmeden önce yeniden temellendirmek iyidir.
Genellikle git merge komutunun bir alternatifidir. Birleştirme her zaman ileriye doğru değişen bir kayıttır. Karşılaştırmalı olarak, rebase git'te ilgi çekici bir geçmişi yeniden yazma aracıdır. Farklı taahhütleri tek tek birleştirir.
Diyelim ki ana şubenizde üç, test adlı diğer şubenizde ise üç taahhütte bulundunuz. Bunu birleştirirseniz, bir süre içinde tüm taahhütler birleştirilir. Ancak onu yeniden temellendirirseniz doğrusal bir şekilde birleştirilir. Aşağıdaki görüntüyü göz önünde bulundurun:
Yukarıdaki resim git rebase'in nasıl çalıştığını açıklamaktadır. Ana dalın üç taahhüdü, test dalının taahhütleriyle doğrusal olarak birleştirilir.
Birleştirme, şubeleri entegre etmenin en basit yoludur. En son iki şube taahhüdü arasında üç yönlü bir birleştirme gerçekleştirir.
Nasıl Yeniden Temellenir
Bir özellik dalında (test dalı) ve bazıları ana dalda bazı taahhütlerde bulunduğunuzda. Bu dallardan herhangi birini yeniden temellendirebilirsiniz. Değişiklikleri (kayıt geçmişi) izlemek için git log komutunu kullanın. Yeniden düzenlemek istediğiniz şubeye ödeme yapın. Şimdi rebase komutunu aşağıdaki gibi gerçekleştirin:
Sözdizimi:
$git rebase
Dalda bazı çakışmalar varsa bunları çözün ve değişikliklere devam etmek için aşağıdaki komutları uygulayın:
$ git status
Durumu kontrol etmek için kullanılır,
$git rebase --continue
Yukarıdaki komut yaptığınız değişikliklere devam etmek için kullanılır. Değişikliği atlamak istiyorsanız aşağıdaki şekilde atlayabilirsiniz:
1 ila 100 roma hayır
$ git rebase --skip
Yeniden temellendirme tamamlandığında. Depoyu orijine itin. git merge komutunu anlamak için aşağıdaki örneği inceleyin.
Diyelim ki bir şubeniz var test2 üzerinde çalışıyorsun. Artık test2 şubesindesiniz ve proje dosyasında bazı değişiklikler yaptınız yenidosya1.txt .
Bu dosyayı depoya ekle:
$ git add newfile1.txt
Şimdi değişiklikleri uygulayın. Aşağıdaki komutu kullanın:
$ git commit -m 'new commit for test2 branch.'
Çıktı şöyle görünecek:
[test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+)
Şubeyi master olarak değiştirin:
$ git checkout master
Çıktı:
Switched to branch 'master.' Your branch is up to date with 'origin/master.'
Artık master dalındasınız. Değişiklikleri dosyama ekledim diyor yeni dosya.txt . Dosyayı depoya eklemek için aşağıdaki komut kullanılır.
$ git add newfile.txt
Şimdi dosyayı değişiklikler için kaydedin:
$ git commit -m ' new commit made on the master branch.'
Çıktı:
livecricket.is
[master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master)
Günlük geçmişini kontrol etmek için aşağıdaki komutu uygulayın.
$ git log --oneline
Çıktı:
Log geçmişinde gördüğümüz gibi master dalda yeni bir commit var. Test2 şubemi yeniden temellendirmek istersem ne yapmalıyım? Aşağıdaki yeniden taban şube senaryosuna bakın:
Şubeyi Yeniden Oluştur
Farklı dallardan çok sayıda taahhüdümüz varsa ve bunları birleştirmek istiyorsak. Bunu yapmak için iki seçeneğimiz var; ya birleştirebiliriz ya da yeniden temellendirebiliriz. Şubenizi yeniden temellendirmek iyidir.
Yukarıdaki örnekten ana dalına taahhütte bulunduk ve onu test2 dalına yeniden temellendirmek istiyoruz. Aşağıdaki komutları görelim:
$ git checkout test2
Bu komut sizi master'dan test2 dalına geçirecektir.
Çıktı:
Switched to branch 'test2.'
Artık test2 şubesindesiniz. Dolayısıyla test2 dalını ana dalla yeniden temellendirebilirsiniz. Aşağıdaki komuta bakın:
$ git rebase master
Bu komut test2 dalını yeniden temellendirecek ve şu şekilde gösterecektir: Uygulanıyor: test2 dalında yeni taahhüt . Aşağıdaki çıktıyı göz önünde bulundurun:
Çıktı:
Git Etkileşimli Yeniden Tabanı
Git, Interactive Rebase ile kolaylaştırıyor; gibi çeşitli işlemlere izin veren güçlü bir araçtır. düzenleme, yeniden yazma, yeniden sıralama, ve mevcut taahhütler hakkında daha fazlası. Interactive Rebase yalnızca o anda kullanıma alınan şubede çalıştırılabilir. Bu nedenle yerel HEAD şubenizi kenar çubuğuna ayarlayın.
Git etkileşimli rebase, rebase komutuyla çağrılabilir, sadece yazın -Ben rebase komutuyla birlikte. Burada ' Ben ' etkileşimli anlamına gelir. Bu komutun sözdizimi aşağıda verilmiştir:
Sözdizimi:
$ git rebase -i
Mevcut tüm etkileşimli seçenekleri listeleyecektir.
Çıktı:
Verilen çıktıdan sonra mevcut seçeneklerin bulunduğu bir düzenleyici açılacaktır. Aşağıdaki çıktıyı göz önünde bulundurun:
Çıktı:
git interaktif rebase komutunu uyguladığımızda yukarıdaki çıktıyla varsayılan metin düzenleyicinizi açacaktır.
js'de base64 kod çözme
İçerdiği seçenekler aşağıda listelenmiştir:
- Seçmek
- Yeniden Kelime
- Düzenlemek
- Kabak
- Onarmak
- Yönetici
- Kırmak
- Düşürmek
- Etiket
- Sıfırla
- Birleştirmek
Yukarıdaki seçenekler git-rebase ile kendi özel görevlerini yerine getirir. Bu seçeneklerin her birini kısaca anlayalım.
Seçim (-p):
Pick, taahhüdün dahil olduğu burada duruyor. Taahhütlerin sırası, yeniden yapılandırma sırasındaki seçim komutlarının sırasına bağlıdır. Bir taahhüt eklemek istemiyorsanız satırın tamamını silmeniz gerekir.
Yeniden Kelime (-r):
Yeniden kelime, pick komutuna oldukça benzer. Yeniden kelime seçeneği, yeniden oluşturma işlemini duraklattı ve taahhüt mesajını değiştirme şansı verdi. Taahhüt tarafından yapılan değişiklikleri etkilemez.
Düzenleme(ler):
Düzenleme seçeneği taahhüdün değiştirilmesine izin verir. Değişiklik anlamına gelir, taahhütler tamamen eklenebilir veya değiştirilebilir. Ayrıca rebase devam komutundan önce ek taahhütler de yapabiliriz. Büyük bir taahhüdü daha küçük taahhüde bölmemize olanak tanır; dahası, bir taahhütte yapılan hatalı değişiklikleri kaldırabiliriz.
Kabak (-s):
Squash seçeneği, iki veya daha fazla işlemi tek bir işlemde birleştirmenize olanak tanır. Ayrıca değişiklikleri açıklamak için yeni bir taahhüt mesajı yazmamıza da olanak tanır.
Düzeltme (-f):
Squash komutuna oldukça benzer. Birleştirilecek taahhüdün mesajını attı. Eski taahhüt mesajı her iki değişikliği de tanımlamak için kullanılır.
Yürüt (-x):
exec seçeneği, bir işleme karşı isteğe bağlı kabuk komutlarını çalıştırmanıza olanak tanır.
Kırılma (-b):
Break seçeneği, yeniden tabanlamayı tam konumda durdurur. Daha sonra ' ile yeniden temellenmeye devam edecek git rebase --devam et ' emretmek.
Bırak d):
Bırakma seçeneği taahhüdü kaldırmak için kullanılır.
Etiket (-l):
Etiket seçeneği mevcut kafa konumunu bir adla işaretlemek için kullanılır.
Sıfırla (-t):
Sıfırlama seçeneği, kafayı bir etikete sıfırlamak için kullanılır.
ikili ağaç sıralı geçiş
GitMerge ve Rebase
Git kullanıcısı için merge komutunun ne zaman kullanılacağı ve rebase'in ne zaman kullanılacağı en yaygın kafa karıştırıcı sorudur. Her iki komut da benzerdir ve her ikisi de bir havuzun farklı dalları tarafından yapılan taahhütleri birleştirmek için kullanılır.
Yeniden temellendirme işlemi tutarsız depolar oluşturacağından, paylaşılan bir dalda yeniden temellendirme önerilmez. Bireyler için yeniden temellendirme, birleştirmeden daha yararlı olabilir. Geçmişin tamamını görmek istiyorsanız birleştirmeyi kullanmalısınız. Merge, taahhütlerin tüm geçmişini takip ederken, rebase yenisini yeniden yazar.
Git rebase komutları, git birleştirmenin alternatifi olarak söylendi. Ancak aralarında bazı temel farklılıklar var:
Git Birleştirme | Git Yeniden Tabanı |
---|---|
Birleştirme, birleşmede son bir taahhüt oluşturur. | Git rebase, yeniden temellendirmede herhangi bir taahhüt oluşturmaz. |
Tüm taahhütleri tek bir taahhüt olarak birleştirir. | Doğrusal bir taahhüt takibi oluşturur. |
Anlaşılması biraz karmaşık olabilecek grafiksel bir tarih oluşturur. | Kolayca anlaşılabilecek doğrusal bir tarih yaratır. |
İki şubeyi birleştirmek güvenlidir. | Git 'rebase' ciddi operasyonla ilgilenir. |
Birleştirme hem kamu hem de özel şubelerde yapılabilir. | Kamu şubelerinde yeniden bazlama kullanılması yanlış bir tercihtir. |
Birleştirme, özellik dalının içeriğini ana dalla bütünleştirir. Böylece ana dal değiştirilir ve özellik dalının geçmişi tutarlı kalır. | Ana dalın yeniden temellendirilmesi özellik dalını etkileyebilir. |
Birleşme tarihi korur. | Yeniden temellendirme, tarihi yeniden yazar. |
Git birleştirme tüm çakışmaları aynı anda sunar. | Git rebase çakışmaları birer birer sunar. |