Bir değişiklik yaptım ve değişiklik kümesine bir dosya eklemeyi unuttum. Diğer HEAD^4kaydetmelerden sonra, dosyanın bir kaydetmede artık eksik olduğunu fark ettim .
Eksik dosyayı dahil etmek için önceki bir kaydı nasıl yeniden yazarım?
Bir değişiklik yaptım ve değişiklik kümesine bir dosya eklemeyi unuttum. Diğer HEAD^4kaydetmelerden sonra, dosyanın bir kaydetmede artık eksik olduğunu fark ettim .
Eksik dosyayı dahil etmek için önceki bir kaydı nasıl yeniden yazarım?
Yanıtlar:
Değiştirmek istediğiniz işlem için seçeneği kullanın git rebase --interactive HEAD~4ve ayarlayın edit.
Uzak depoya bu şekilde gönderilen commit'leri değiştirmemeniz gerektiğini unutmayın . Bu durumda eksik dosya ile yeni bir kayıt eklemek daha iyidir.
git push -fYukarı akışın değişmediğinden emin olursam , bunu yapmama izin vermez mi ?
addEksik dosyaları zaten doldurmuştum, bu yüzden mesaj olarak "xxx" ile bir işlem yaptım. Sonra rebase komutunu yaptım ve "xxx" yürütmeyi "seç" ten "düzenle" ye değiştirdim. Sonra "git rebase --continue" yaptım. Şimdi geçmişe baktığımda en son kaydetme olarak "xxx" var ve onları eklemek istediğim önceki işlem değişmedi! Acaba hatam nerede?
İnsanların daha basit bir cevap bulmak için Google'ı arayarak buraya gelebileceğini biliyorum : Ya bu sadece son işlemse? (OP'nin sorusu, tarihteki 4. kesinliği düzeltmek içindir)
Hemen bir dosya eklemeyi unuttuğunuzu anlarsanız, şunları yapın :
# edited file-that-i-remember.txt
git add file-that-i-remember.txt
git commit
# realize you forgot a file
git add file-that-i-forgot.txt
git commit --amend --no-edit
--no-editAynı commit mesajı nerede saklanacak.
Basit!
HEAD^4. Olduğu gibi tamam, referans için bir ek olarak. ;)
Bu 4 işlemi GERÇEKLEŞTİRMEDENİZ, aşağıdaki şekilde yapabilirsiniz:
Tüm bu kayıtlar için yama dosyaları oluşturun:
git format-patch -4
4 kaydetme ile geri sar:
git reset --hard HEAD~4
Eksik dosyayı ekleyin:
git add missing-file
Şununla taahhüt et --amend:
git commit --amend
Kaydedilen tüm yamaları geri uygulayın:
git am *.patch
Eğer ittiyseniz, bu yöntemi KULLANMAMALISINIZ. Bunun yerine, hatanızı kabul edin ve HEAD üzerine bu sorunu çözen bir işlem daha oluşturun.
git format-patch/ git amçok daha iyi. En önemlisi, bir şeyi batırırsanız size daha fazla güven verir - fiziksel dosyada yama olarak kaydedilen işlem, en iyi güvenlik ağınızdır.
git gc
rm *.patch)
Kabul edilen cevap doğru olsa da, bir yeniden ödeme işlemi sırasında bir taahhüdü düzenlemenin nasıl gerçekleştirileceğine ilişkin ayrıntılı talimatlardan yoksundur.
İlk olarak, bir yeniden ödeme süreci başlatın:
git rebase --interactive HEAD~4
Bir kaydetme listesi sunulacak, kelimeyi pickolarak değiştirerek düzenlemek istediğiniz kaydı seçin editve dosyayı kaydedin.
Kodunuzda gerekli değişiklikleri yapın ( git addyeni dosyalar için çağırmayı unutmayın )
Tüm değişiklikler yapıldıktan sonra, yayınla git commit --amend- bu, olarak işaretlenmiş bir taahhüdü değiştirecektiredit
git rebase --continueİşlemi tamamlayacak çağrı yapın (olarak işaretlenen daha fazla editkaydetme varsa, yukarıdaki adımların tekrarlanması gerekir)
Önemli notlar:
pickDüzenlemek istemediğiniz olarak işaretlenmiş satırları SİLMEYİN - olduğu gibi bırakın. Bu satırların silinmesi, ilgili kayıtların silinmesine neden olacaktır
GIT stash, çalışma dizininiz temiz değilse sizi yeniden oluşturmadan önce zorlar ; Ancak git stash pop / git stash apply, yeniden ödeme sırasında, bu değişiklikleri (yani, yeniden ödeme sürecine başlamadan önce saklanan değişiklikler) olarak işaretlenmiş bir taahhüde değiştirmek için yapabilirsiniz.edit
Bir şeyler ters giderse ve yeniden ödeme işlemi sırasında yapılan değişiklikleri tamamlanmadan önce geri döndürmek istiyorsanız (yani, yeniden temellemeyi başlatmadan önceki noktaya dönmek istiyorsanız), şunu git rebase --abortda okuyun: --abort olmazsa etkileşimli bir yeniden taban nasıl iptal edilir ' t çalışmak?
Kabul edilen cevapta söylendiği gibi:
Uzak depoya bu şekilde gönderilen commit'leri değiştirmemeniz gerektiğini unutmayın. Bu durumda eksik dosya ile yeni bir kayıt eklemek daha iyidir.
Bunun cevabı Git Kitabında (" Yeniden Satış Tehlikeleri " başlıklı paragraf ):
Deponuzun dışında bulunan kayıtları yeniden sunmayın.
Bu yönergeye uyarsanız, iyi olacaksınız. Yapmazsan, insanlar senden nefret edecek ve arkadaşların ve ailen tarafından aşağılanacaksın.
Bir şeyleri yeniden sıraladığınızda, mevcut taahhütleri terk ediyorsunuz ve benzer ancak farklı olan yenilerini oluşturuyorsunuz. Bir yere commit'leri ittirirseniz ve diğerleri onları aşağı çeker ve üzerlerinde çalışmayı temel alırsa ve daha sonra bu commit'leri git rebase ile yeniden yazar ve onları tekrar yükseltirseniz, işbirlikçilerinizin çalışmalarını yeniden birleştirmeleri gerekecek ve denediğinizde işler karışacak işlerini kendinize geri çekin.
[...]