Saya memiliki repositori Git jarak jauh, dan saya perlu mengembalikan n
komitmen terakhir hingga terlupakan.
111
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 -f
untuk memaksa pembaruan.
git reset --hard [sha1]
mana sha1 adalah pengenal hash komit.revert
akan 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 --hard
juga menyebabkan cabang fitur diperlakukan sebagai sudah digabungkan? Asumsi saya adalah tidak akan (kemanarevert
).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:
Atau, jika ada commit SHA1 tertentu (katakanlah 1e4f99e dalam bentuk singkat) Anda ingin kembali ke:
sumber
Untungnya saya berada dalam posisi untuk menggunakan solusi Pat Notz yang sepenuhnya menghapus komit yang tidak diinginkan. Namun, awalnya saya mendapatkan error tersebut
Tetapi menambahkan opsi force (
-f
) akan menimpa kesalahan inisumber
Jika Anda memiliki akses langsung ke repo jarak jauh, Anda selalu dapat menggunakan:
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?
sumber
--soft
bahkan perlu? Anda mungkin bisa melakukan hal yang sama hanya dengan polosgit reset
, tanpa tanda mode.