Uzaktan kumandayı belirli bir commit'e sıfırlama
Commit <commit-hash>
işleminden sonra yapılan tüm değişiklikleri atmak istiyorum.
Ben de öyle yaptım:
git reset --hard <commit-hash>
Şimdi aynısını kumandam için yapmak istiyorum. Bunu nasıl yapabilirim? `den sonra bazı commitler (ve pushlar) yaptım ve sadece hepsini atmak istiyorum. Yolda korkunç bir şekilde yanlış giden bir şey var ve bunu olduğundan daha kötü hale getirmek istemiyorum ;(
Temel olarak origin/master
öğemi <commit-hash>
öğesine geri sarmak istiyorum
629
3
Şubenizin hem burada hem de uzaktan
master
olarak adlandırıldığını ve uzaktanorigin
olarak adlandırıldığını varsayarak yapabilirsiniz:Ancak, başka biri uzak deponuzla çalışıyorsa ve değişikliklerinizi çekmişse bunu yapmaktan kaçınmalısınız. Bu durumda, istemediğiniz değişiklikleri revert yapmanız ve ardından normal şekilde push etmeniz daha iyi olacaktır.
Güncelleme: aşağıda başkalarının sizin yaptığınız değişiklikleri çektiğini açıkladınız, bu nedenle tüm bu değişiklikleri geri alan yeni bir commit oluşturmak daha iyidir. Bunu yapmak için seçeneklerinizin güzel bir açıklaması var Jakub Narębski'nin bu cevabı. Hangisinin en uygun olduğu, kaç değişikliği geri almak istediğinize ve hangi yöntemin sizin için en mantıklı olduğuna bağlıdır.
Sorunuzdan
master
dalınızı sıfırlamak için zatengit reset --hard
kullandığınız anlaşıldığından, dalınızı daha önce olduğu yere geri taşımak içingit reset --hard ORIG_HEAD
kullanarak başlamanız gerekebilir. (Her zamangit reset --hard
ile olduğu gibi,git status
un temiz olduğundan, doğru dalda olduğunuzdan ve görünüşte kaybolan taahhütleri kurtarmak için bir araç olarakgit reflog
dan haberdar olduğunuzdan emin olun). Ayrıcagit show ORIG_HEAD
ileORIG_HEAD
in doğru commit`e işaret ettiğini kontrol etmelisiniz.Sorun Giderme:
Eğer " gibi bir mesaj alırsanız! [remote rejected] a60f7d85 -> master (pre-receive hook declined)"
o zaman belirli bir dal için dal geçmişinin yeniden yazılmasına izin vermeniz gerekir. Örneğin BitBucket'ta "Dal geçmişinin yeniden yazılmasına izin verilmez" yazıyordu. İşaretlemeniz gereken
Şube geçmişinin yeniden yazılmasına izin ver
adlı bir onay kutusu vardır.Yerel değişiklikleri kaybetmek istemiyorsanız diğer cevapları kullanın. Bu yöntem, geri dönmek için yanlış commit hash'ini seçerseniz remote'ınızı mahvedebilir.
Eğer sadece uzaktaki işlemin yerel şubenizde bulunan bir işlemle eşleşmesini istiyorsanız:
Herhangi bir sıfırlama yapmayın.
Remote'ta olmasını istediğiniz commit'in hash'ini bulmak için
git log
kullanın. Değişiklikleri görmek içingit log -p
veya kompakt bir ağaç görmek içingit log --graph --all --oneline --decorate
kullanın. (Bu sonuncusunu kabuğunuzda bir takma ad olarak kullanmak çok kullanışlıdır).Karmayı kopyalayın.
Aşağıdaki gibi bir komut çalıştırın:
Örneğin.
Sizinki gibi bir sorunu bu komutlarla çözdüm: