Jawaban:
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.
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 .
reset --hardjuga menyebabkan cabang fitur diperlakukan sebagai sudah digabungkan? Asumsi saya adalah tidak akan (kemana revert).
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
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
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?
git reset --hard [sha1]mana sha1 adalah pengenal hash komit.