Şimdiye kadar olan tüm cevaplar, takip eden endişeyi gidermiyor:
Silinecek olandan sonra yüzlerce düzeltme olduğunda etkili bir yöntem var mı?
Adımlar takip edilir, ancak referans için aşağıdaki geçmişi varsayalım:
[master] -> [hundreds-of-commits-including-merges] -> [C] -> [R] -> [B]
C : kaldırılacak taahhüdü takip eden taahhüt (temiz)
R : Kaldırılacak taahhüt
B : kaldırılacak taahhütten hemen önceki taahhüt (taban)
"Yüzlerce düzeltme" kısıtlaması nedeniyle, aşağıdaki ön koşulları varsayıyorum:
- hiç var olmamak istediğin utanç verici bir taahhüt var
- aslında bu utanç verici taahhüdüne bağlı olan SIFIR müteakip taahhütleri vardır (geri dönüşte sıfır çatışma)
- müdahale eden yüzlerce taahhüdün 'Committer' olarak listelenmesini umursamazsınız ('Yazar' korunacaktır)
- depoyu hiç paylaşmadın
Bu oldukça kısıtlayıcı bir dizi kısıtlamadır, ancak aslında bu köşe durumunda çalışan ilginç bir cevap var.
İşte adımlar:
git branch base B
git branch remove-me R
git branch save
git rebase --preserve-merges --onto base remove-me
Eğer gerçekten çatışma yoksa, bu daha fazla kesinti olmaksızın devam etmelidir. Çatışmalar varsa, bunları çözebilir verebase --continue veya utançla yaşamaya karar verebilirsiniz rebase --abort.
Şimdi, masterartık R'yi taahhüt etmemiş olmalısınız . saveDaha önce bulunduğunuz yere geri şube noktaları, eğer uzlaştırmak istiyorum.
Başkalarının yeni geçmişinize aktarımını nasıl düzenlemek istediğiniz size bağlıdır. Sen tanımak gerekir stash, reset --hardve cherry-pick. Ve silebilir base, remove-meve savedalları