Yanıtlar:
git reset --hard HEAD~1
git push -f <remote> <branch>
(Örnek itme: git push -f origin bugfix/bug123
)
Bu, son taahhüdü geri alır ve güncellenmiş geçmişi uzaktan kumandaya gönderir. Geçiş yapmanız gerekiyor, -f
çünkü uzaktan kumandadaki yukarı akış geçmişini değiştiriyorsunuz.
git log --decorate --oneline
için nerede BAŞ noktalarını öğrenmek için.
git reset HEAD~1
değişikliklerinizin gitmesini istemiyorsanız (değişmemiş değişiklikler). Değişim, taahhüt ve tekrar itmegit push -f [origin] [branch]
Genellikle aşağıdakileri kullanarak "ters" bir taahhütte bulunun:
git revert 364705c
sonra her zamanki gibi uzaktan kumandaya gönderin:
git push
Bu, taahhüdü silmez: İlk taahhüdün yaptıklarını geri alan ek bir taahhüt yapar. Başka bir şey, gerçekten güvenli değil, özellikle değişiklikler zaten yayılmışsa.
git reset
yalnızca sunucuda değişiklikleri göndermediyseniz kabul edilir.
Her şeyden önce, sakin ol.
"Hiçbir şey bizim kontrolümüz altında değil. Bizim kontrolümüz sadece bir yanılsamadır.", "Hata hatadır"
İstemeden kodunuzu zorladınız remote-master
. BU iyi olacak.
1. İlk olarak, SHA-1
geri döndürmeye çalıştığınız taahhüdün değerini alın , örn. Ana şubeye taahhüt. bunu çalıştır:
git log
her bir taahhütle birlikte 'f650a9e398ad9ca606b25513bd4af9fe ...' gibi dizeler göreceksiniz. bu numarayı geri dönmek istediğiniz taahhütten kopyalayın .
2. Şimdi aşağıdaki komutu yazın:
git reset --hard your_that_copied_string_but_without_quote_mark
"HEAD şu anda" şeklinde bir mesaj görmelisiniz. açıksın. Az önce yaptığı bu değişikliği yerel olarak yansıtmak.
3. Şimdi aşağıdaki komutu yazın:
git push -f
gibi görmelisin
"uyarı: push.default ayarlanmamış; örtük değeri değişti ..... ... Toplam 0 (delta 0), yeniden kullanılan 0 (delta 0) ... ... your_branch_name -> master (zorunlu güncelleme) ."
Şimdi, hepiniz açıksınız. "Git log" ile master'ı tekrar kontrol edin, fixed_destination_commit listenin başında olmalı.
Birşey değil (önceden;))
GÜNCELLEME:
Şimdi, tüm bunlar başlamadan önce yaptığınız değişiklikler artık gitti. Bu zor işleri tekrar geri getirmek istiyorsanız, mümkün. Sayesinde git reflog ve git kiraz almak komutları.
Bunun için lütfen bu blogu veya bu gönderiyi takip etmenizi öneririm .
Etkileşimli bir rebase yapabilirsiniz:
git rebase -i <commit>
Bu, varsayılan düzenleyicinizi getirecektir. Bu taahhüdü silmek için kaldırmak istediğiniz komutu içeren satırı silmeniz yeterlidir.
Elbette bu değişikliği orada uygulamak için uzak depoya erişmeniz gerekecek.
Şu soruya bakın: Git: seçilen taahhütleri depodan kaldırma
Kullanmayı deneyin
git reset --hard <commit id>
Lütfen Dikkat: Burada taahhüt kimliği, gitmek istediğiniz taahhüdün kimliği olacaktır, ancak sıfırlamak istediğiniz kimliği değil. bu da sıkışmış tek nokta oldu.
sonra it
git push -f <remote> <branch>
git reset --hard <the-sha-you-want-to-return-to>
.