Mengembalikan repositori Git jarak jauh


111

Saya memiliki repositori Git jarak jauh, dan saya perlu mengembalikan nkomitmen terakhir hingga terlupakan.

Jawaban:


135

Kamu bisa memakai git revert <commit>… untuk semua n komit, lalu mendorong seperti biasa, menjaga riwayat tidak berubah.

Atau Anda dapat "memutar kembali" dengan git reset --hard HEAD~n. Jika Anda mendorong dalam repositori publik atau bersama, Anda mungkin menyimpang dan merusak pekerjaan lain berdasarkan cabang asli Anda. Git akan mencegah Anda melakukannya, tetapi Anda dapat menggunakannya git push -funtuk memaksa pembaruan.


5
Anda dapat melakukan rollback ke komit tertentu dengan menggunakan: di git reset --hard [sha1]mana sha1 adalah pengenal hash komit.
pisaruk

7
Anda tidak dapat menggunakan get reset --hard di repositori jarak jauh karena tidak ada direktori yang berfungsi. Pertanyaan awal hanya menyatakan ada remote repo, tidak ada local repo disebutkan.
Hazok

2
hanya sebuah catatan, git push -f akan memaksa mendorong semua cabang lokal ke remote mereka
cowlinator

Harap diingat, bahwa penggunaan revertakan menyebabkan cabang fitur Anda diperlakukan sebagai "sudah" digabungkan. Itu karena cabang-cabang ini sebenarnya sedang digabungkan. Tapi perubahan itu dikembalikan. Solusi: Pilih ceri atau kembalikan komit pengembalian .
Benedikt

@Benedikt apakah reset --hardjuga menyebabkan cabang fitur diperlakukan sebagai sudah digabungkan? Asumsi saya adalah tidak akan (kemana revert).
Marcus Leon

37

elmarco benar ... sarannya adalah yang terbaik untuk repositori bersama / publik (atau, setidaknya cabang publik). Jika tidak dibagikan (atau Anda bersedia mengganggu orang lain), Anda juga dapat mendorong ref tertentu:

git push origin old_master:master

Atau, jika ada commit SHA1 tertentu (katakanlah 1e4f99e dalam bentuk singkat) Anda ingin kembali ke:

git push origin 1e4f99e:master

9

Untungnya saya berada dalam posisi untuk menggunakan solusi Pat Notz yang sepenuhnya menghapus komit yang tidak diinginkan. Namun, awalnya saya mendapatkan error tersebut

error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*

Tetapi menambahkan opsi force ( -f) akan menimpa kesalahan ini

git push -f origin 52e36b294e:master

3

Jika Anda memiliki akses langsung ke repo jarak jauh, Anda selalu dapat menggunakan:

git reset --soft <sha1>

Ini berfungsi karena tidak ada upaya untuk mengubah direktori kerja yang tidak ada. Untuk lebih jelasnya silakan lihat jawaban aslinya:

Bagaimana saya bisa membatalkan komit terakhir di repositori git bare?


2
Mengapa --softbahkan perlu? Anda mungkin bisa melakukan hal yang sama hanya dengan polos git reset, tanpa tanda mode.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.