Saya baru saja melakukan sumber yang salah ke proyek saya menggunakan --force
opsi.
Apakah mungkin untuk kembali? Saya memahami bahwa semua cabang sebelumnya telah ditimpa menggunakan -f
opsi, jadi saya mungkin telah mengacaukan revisi saya sebelumnya.
git
git-commit
git-push
David van Dugteren
sumber
sumber
Jawaban:
Git umumnya tidak membuang apa pun, tetapi memulihkan dari ini mungkin masih sulit.
Jika Anda memiliki sumber yang benar maka Anda bisa mendorongnya ke remote dengan
--force
opsi. Git tidak akan menghapus cabang apa pun kecuali Anda menyuruhnya. Jika Anda benar-benar kehilangan komit, lihat panduan berguna ini untuk memulihkan komit . Jika Anda mengetahui SHA-1 dari komit yang Anda inginkan, Anda mungkin baik-baik saja.Hal terbaik untuk dilakukan: Cadangkan semuanya dan lihat apa yang masih ada di repositori lokal Anda. Lakukan hal yang sama pada remote jika memungkinkan. Gunakan
git fsck
untuk melihat apakah Anda dapat memulihkan sesuatu, dan yang terpenting JANGAN dijalankangit gc
.Di atas segalanya, jangan pernah menggunakan
--force
opsi kecuali Anda benar-benar bersungguh-sungguh.sumber
git reflog show remotes/origin/master
,. Anda harus bisa melihat dorongan Anda di sana; komit di baris sebelumnya adalah tempat sebelum Anda mengacaukannya. Anda kemudian dapat mendorong revisi itu (dengan--force
) ke asal, dan kembali ke tempat Anda sebelumnya!git fetch
diedit untuk waktu yang lama) Anda dapat menampilkan reflog dari sisi GitHub dan memulihkan!Jika Anda mengetahui hash komit, itu mudah, cukup buat ulang cabang Anda.
Hapus cabang jarak jauh:
kemudian buat ulang cabang Anda dengan perintah berikut:
sumber
Solusinya sudah disebutkan di sini
sumber
git reflog show remotes/origin/master
jika git reflog diperlukan (seperti yang disebutkan oleh @Cascabel di atas)Jika Anda tidak berada di repo lokal tempat dorongan paksa berasal, pada tingkat asal / master tidak ada cara untuk memulihkan. Tetapi jika Anda cukup beruntung untuk menggunakan GitHub atau GitHub for Enterprise , Anda dapat melihat ke REST API dan mengambil komit yang hilang sebagai tambalan, contoh:
sumber
Cara lain untuk memulihkan komit yang hilang atau bahkan untuk mencari tahu komit apa yang hilang, jika dorongan sebelumnya tidak berasal dari repo lokal Anda, adalah dengan melihat mesin CI Anda.
Jika Anda memiliki pekerjaan yang menguji cabang master setelah setiap komit (atau serangkaian komit berurutan), yang seharusnya Anda miliki, Anda dapat melihat apa yang terakhir kali diuji. Itu adalah komitmen yang perlu Anda pulihkan.
Mesin CI bahkan dapat menyimpan tiruan lokal dari repo, yang darinya Anda mungkin dapat melakukan pemulihan ini.
Sumber: mungkin Pengiriman Berkelanjutan: Rilis Perangkat Lunak yang Andal melalui Build, Test, dan Deployment Automation (Addison-Wesley Signature Series (Fowler))
sumber
Ya, Anda dapat memulihkan komit setelahnya
git push -f your_branch
Jadi Anda bisa melakukan:
1-
git reflog
2- Anda memilih Head_Number yang ingin Anda pulihkan
git reset –hard HEAD@{HEAD-NUMBER}
3- Anda dapat melihat semua komitmen di kepala ini dengan
git cherry -v branch_name
4- pada akhirnya Anda harus memaksa mendorong
git push -f branch_name
ATAU
1- Dapatkan nomor SHA dari klien GIT Anda (antarmuka)
2- paksa dorong
Semoga ini membantu
sumber
Saya melakukan hal yang sama saat membatalkan dorongan terakhir hanya untuk satu file. Akhirnya akan kembali ke keadaan asli repositori. Saya menggunakan perintah git dari Linus karena saya memiliki salinan lokalnya di Linux. Untungnya salinan itu masih utuh.
Yang saya lakukan adalah (setelah dengan panik membuat beberapa salinan repo lokal):
(dikatakan bahwa origin / master berada di depan dengan 68 komit, baiklah ... itu semua adalah komit yang saya hapus)
Dan semuanya dipulihkan seperti sebelum saya melakukan dorongan kuat. Hal terpenting untuk diingat adalah jangan pernah melakukan git checkout. setelah Anda mendorong dengan paksa. Tetapi praktik terbaik adalah menonaktifkan opsi push. Saya tidak pernah menggunakannya lagi. Mempelajari pelajaran saya !!
sumber
Untuk orang-orang yang berada dalam situasi yang sangat buruk seperti saya sebelumnya (misalnya, jika Anda mendapatkan
bad object
kesalahan saat berlarigit reset --hard
):Saya menulis skrip yang disebut penghemat pohon yang menarik semua file Anda dari GitHub API sebagai upaya terakhir. Berikut cara menggunakannya:
treesaver
skrip dancd
untuk itu.SHA
string pohon yang ingin Anda pulihkan dengan mengakseshttps://api.github.com/repos/<your_username_or_org>/<repo>/events
.payload
properti yang sesuai dengan peristiwa push Anda, temukan yangcommit
ingin Anda kembalikan dan klikurl
.commit.tree
, salintree
'surl
.python3 main.py <tree_url> <path_to_save_to>
.Misalnya, dalam kasus saya, saya akan menjalankan:
Tentu saja, PR menyambut.
sumber
Di sini Anda dapat membaca keputusan https://evilmartians.com/chronicles/git-push---force-and-how-to-deal-with-it
Yang kedua membantu saya. Saya melakukan kesalahan perintah ini
Setelah perintah ini saya kehilangan tiga komit. Untuk memulihkannya, saya melihat ke terminal tempat saya melakukan 'git pull' yang salah dan telah melihat keluaran seperti
60223bf ... 0b258eb some-branch -> origin / some-branch
Hash 0b258eb kedua persis seperti yang saya butuhkan. Jadi, saya mengambil hash ini dan menghasilkan perintah
sumber