Bagaimana git revert
penggunaannya?
Ini mungkin terdengar seperti pertanyaan duplikat tetapi ketika orang menanyakannya, responsnya sering, gunakan git reset
sesuai Kembalikan ke komit oleh hash SHA di Git?
Kemudian ketika seseorang bertanya bagaimana menggunakan git reset
balasan orang mengatakan Anda harus menggunakan git revert
sesuai Git - cara rollback
Sebelum Anda menyadarinya, 8 orang berbeda muncul dengan cara unik mereka sendiri untuk menyelamatkan pantat OP, yang semuanya di atas kepala Anda.
Jadi mari kita coba dan tetap singkat dan menulis Panduan Dummies untuk git revert
.
Sebuah skenario: Anda telah berkomitmen dua kali untuk menguasai dan itu buruk. Anda telah mendorong dan orang lain mengalami perubahan buruk Anda.
Anda ingin membatalkannya. Ini bukan sesuatu yang dapat Anda urungkan sendiri dalam kode, katakanlah beberapa wizard atau manajer paket mengubah banyak hal di semua tempat - Anda hanya ingin mengembalikan semuanya seperti semula.
Inilah inti dari kendali sumber. Saya yakin itu mudah.
Oke, Anda akan menggunakan git revert
tapi bagaimana caranya?
Dan setelah berlari, git revert
apakah Anda harus melakukan hal lain setelahnya? Apakah Anda harus mengkomit perubahan yang dibuat atau tidak langsung berkomitmen ke repo atau apa ??
Jelas Anda harus mendorong lagi dan mungkin mengumumkan keberanian Anda kepada tim.
git revert -n <commitToRevet>
ataugit revert --no-commit <commitToRevet>
Gunakan git revert seperti ini:
git revert <insert bad commit hash here>
git revert
membuat komit baru dengan perubahan yang dibatalkan.git reset
menghapus riwayat git Anda alih-alih membuat komit baru.Langkah-langkah setelahnya sama dengan commit lainnya.
sumber
Alasan
reset
danrevert
cenderung muncul banyak dalam percakapan yang sama adalah karena sistem kontrol versi yang berbeda menggunakannya untuk maksud yang berbeda.Secara khusus, orang-orang yang terbiasa dengan SVN atau P4 yang ingin membuang perubahan yang tidak terikat ke file akan sering meraih
revert
sebelum diberi tahu bahwa mereka sebenarnya menginginkannyareset
.Demikian pula,
revert
padanan di VCS lain sering disebutrollback
atau sesuatu yang serupa - tetapi "rollback" juga bisa berarti "Saya ingin sepenuhnya membuang beberapa commit terakhir", yang memang sesuaireset
tetapi tidakrevert
. Jadi, ada banyak kebingungan di mana orang tahu apa yang ingin mereka lakukan, tetapi tidak jelas perintah mana yang harus mereka gunakan untuk itu.Adapun pertanyaan Anda yang sebenarnya tentang ...
git revert first-bad-commit..last-bad-commit
Secara default,
git revert
meminta Anda untuk melakukan pesan dan kemudian mengkomit hasilnya. Ini bisa diganti. Saya mengutip halaman manual :Secara khusus, secara default ini membuat komit baru untuk setiap komit yang Anda kembalikan. Anda dapat menggunakan
revert --no-commit
untuk membuat perubahan dengan mengembalikan semuanya tanpa melakukan perubahan tersebut sebagai komitmen individu, kemudian berkomitmen pada waktu luang Anda.sumber
git revert first-bad-commit..last-bad-commit
: Saya pikir ini seharusnyagit revert parent-of-first-bad-commit..last-bad-commit
.Pertanyaannya cukup lama tapi kembali masih membingungkan orang (seperti saya)
Sebagai seorang pemula, setelah beberapa kali coba-coba (lebih banyak kesalahan daripada percobaan) saya mendapat poin penting:
git revert
membutuhkan id dari komit yang ingin Anda hapus menyimpannya ke dalam riwayat Andagit reset
memerlukan komit yang ingin Anda pertahankan , dan akibatnya akan menghapus apa pun setelah itu dari riwayat.Artinya, jika Anda menggunakan
revert
dengan komit id pertama, Anda akan menemukan diri Anda ke dalam direktori kosong dan komit tambahan dalam riwayat, sementara dengan reset direktori Anda akan .. dikembalikan ke komit awal dan riwayat Anda akan menjadi seolah-olah komit terakhir tidak pernah terjadi.Agar lebih jelas lagi, dengan log seperti ini:
Menggunakan
git revert cb76ee4
will secara default akan membawa file Anda kembali ke 01b56c6 dan akan menambahkan komit lebih lanjut ke riwayat Anda:git reset 01b56c6
sebagai gantinya akan membawa file Anda kembali ke 01b56c6 dan akan membersihkan komit lainnya setelah itu dari riwayat Anda:Saya tahu ini adalah "dasar" tetapi cukup membingungkan bagi saya, dengan menjalankan
revert
id pertama ('komit pertama') saya berharap menemukan file awal saya, perlu beberapa saat untuk memahami, bahwa jika Anda membutuhkan file Anda kembali sebagai 'komit pertama' Anda perlu menggunakan id berikutnya.sumber
Saya mengembalikan beberapa komit dengan menjalankan 'git revert commit id' seperti:
Kemudian saya diminta untuk melakukan pengembalian (seperti yang Anda lakukan saat menjalankan 'git commit'). Program terminal default saya adalah Vim jadi saya menjalankan:
Akhirnya saya mendorong perubahan ke repositori dengan:
sumber