2 taahhüt var, A sonra B, itilmeye hazır. A.'da bir şey eklemeyi unuttuğumu fark ettim.
Magit kullanarak bu değişikliği A'ya nasıl ekleyebilirim? Git belgelerinin hangi bölümüne bakmam gerektiğini bile bilmiyorum.
2 taahhüt var, A sonra B, itilmeye hazır. A.'da bir şey eklemeyi unuttuğumu fark ettim.
Magit kullanarak bu değişikliği A'ya nasıl ekleyebilirim? Git belgelerinin hangi bölümüne bakmam gerektiğini bile bilmiyorum.
Yanıtlar:
HEAD
Örneğe, "ikinci ikinci B" sıfatıyla bir şey eklemek istediğiniz bir an gibi davranalım .
Açılan açılır pencere cbağlayıcı bir " aAmend" içerir. Bu tuşa basmak, aşamalı olarak HEAD
taahhütte yapılan değişiklikleri "değiştirir" . Git'teki taahhütler değişmediğinden, bu aslında eski taahhüdün yerine yeni bir taahhüt verir. Eski onaylama mesajına sahip bir arabellek açılır, böylece eklenen değişikliğin aynı zamanda mesajı ayarlamanızı gerektirmesi durumunda değiştirebilirsiniz. Her zaman C-c C-colduğu gibi, mesajı düzenlemeyi tamamladığınızda tuşuna basın . Bu git commit --amend
komut satırında çalışmaya eşdeğerdir .
HEAD
ekle ve taahhüt iletisini düzenleÇoğu zaman yalnızca değişikliği veya iletiyi ayarlamanız gerektiğinden dolayı , Magit iki ek seçenek sunar:
HEAD
onaylanan iletiyi düzenlemeden aşamalı değişiklikleri ekleyinHEAD
Aşamalı değişiklikleri eklemeden mesajını değiştirDeğil bir taahhüdü düzenlemek istediğinizde HEAD
, o zaman yukarıdaki işe yaramaz. Bu komutlar daima HEAD
taahhüdü "değiştirir" (yani değiştirir) . Git, başka bir taahhüdü değiştirmek için tek bir komut sağlamaz, HEAD
bu yüzden bu biraz daha karmaşıktır.
Magit yok böyle bir komut sağlar, ancak durumlar vardır, çünkü biz öncelikle bu tartışacağız birden fazla adımda bunu tercih olduğu.
Dışında bir taahhüdü değiştirmek HEAD
üç adıma bölünebilir:
A
) HEAD
.HEAD
sonuçlanan (yukarıda açıklandığı gibi) değiştirin A'
.A
, ancak bunun da ötesinde A'
.Bu etkileşimli bir rebase kullanılarak yapılabilir. Tip rRebase açılır penceresini göstermek için. Daha sonra m"bir düzeltme düzenle" rebase varyantını çağırmak için yazın . Son taahhütleri olan bir tampon belirir. Değiştirmek istediğiniz taahhüde gidin ve C-c C-cseçmek için yazın. Git daha sonra geçmişi bu işleme geri alır ve durum arabelleğinde devam eden yeniden düzenleme hakkında bilgi gösterir.
HEAD
Yukarıda açıklandığı gibi değiştirin . Ardından Git'e yazdığınızı söyleyin r r. Eğer A'
ve B
çatışma o zaman rebase durur ve çatışma B
çözmek zorunda kalırsınız. Bunu yaptıktan sonra r rdevam etmek için tuşuna basın .
Yapacağınız değişikliklerin A
çatışmalarla sonuçlanacağını biliyorsanız, B
yukarıda açıklanan şekilde devam edin, aksi takdirde aşağıdaki yaklaşımı kullanın.
Git kullanarak "düzeltme taahhütleri" oluşturulmasına izin verilir git commit --fixup A
. Bu, “başka bir taahhütte yapılması gereken değişiklikleri” kaydeden yeni bir taahhüt yaratır . Bu taahhüt yeni olur HEAD
. Bir --squash
varyantı da var . Farklılıklar hakkında bilgi için git-commit
man sayfasına bakınız .
A
Taahhüdü ve yeni taahhüdü bir araya A'
getirip yeniden uygulamak B
için yeniden uygulamanız gerekir. Magit, bunun için uygun bir komut sağlar r f.
Yukarıdaki yaklaşımdaki en büyük fark, burada önce yeni bir taahhüt oluşturmamız, ardından bunu “hedef” ile birleştirip yeniden uygulamaya koymamız gerektiğidir B
. Yukarıda taahhüt etmek yerine yeniden yapılanma ile başladık.
Magit her iki --fixup
ve --squash
varyantları edinilebilir üzerine, açılan taahhüt fve s. Ama Magit da "anlık" Fixup ve squash komutların varyantları sağlar Fve S. Bu değişkenler, "anlık olmayan" değişkenler gibi yeni bir işlem oluşturur, ancak daha sonra başka bir komutu çağırmanıza gerek kalmadan, düzeltme işlemini yeniden oluşturma kullanarak hedef işlemeyle anında birleştirir.
"Anında düzeltme" ( c F) aslında "genişlet HEAD
" ( c e) ile aynı şeydir , yalnızca herhangi bir işlem için çalışması dışında HEAD
.
Daha fazla okuma:
git-commit(1)
git-rebase(1)
git-commit
man sayfası git-rebase(1)
bu satırlara sahip olan yönlendirmeleri yönlendirir : Katlanmış taahhüt için önerilen taahhüt mesajı, ilk teklifin ve "squash" komutuna sahip olanların taahhüt mesajlarının birleştirilmesidir, ancak "düzeltme" içeren taahhüt mesajlarını atlar. komut. IOW, sadece önceki onaylamadaki kodu düzeltmek istiyorsanız düzeltme komutunu kullanın, onaylama mesajını da düzeltmek istiyorsanız squash kullanın .
git commit --amend –C HEAD
Aramak istediğiniz Git komutu ve Magit’te değişiklik yapabilirsiniz C-c C-a
.
C-c C-a
eski bir sürümden (sanırım). Ayrıca yardım tamponunda ( ?
) "değişiklik" izi yok .
Yani bir iş akışı:
Sonra
Otomatik yıkama, otomatik olarak tüm! Sabitleme işlemlerini doğru yere götürür ve tekrar tabanda ezilmesi için ayarlar.
i
bana gelir Cannot rebase: Your index contains uncommitted changes. Please commit or stash them.
. Ancak kabul edilmemiş herhangi bir değişiklik yapmam. : /
Proceed despite merge in rebase range? [c]ontinue, [s]elect other, [a]bort
. Düzeltmemin yaklaşmakta olan birleşime sıçrayabileceğini söylemeye mi çalışıyor?
merge in rebase
altında HATALAR bakın git help rebase
. Yukarı doğru çekmeden önce düzeltmeyi yapmayı öneririm.
Son taahhüdünü değiştirmek için "c a" dır. Düzeltme, bazı eski taahhütleri değiştirmek içindir.