Pertama-tama, jika Anda bekerja dengan orang lain pada repositori kode yang sama, Anda tidak boleh menghapus komit karena ketika Anda memaksa pembaruan pada repositori itu akan membuat repositori lokal rekan kerja Anda dalam keadaan ilegal (misalnya jika mereka membuat komit setelah komit yang Anda hapus, komit tersebut tidak akan valid karena komit tersebut didasarkan pada komit yang sekarang tidak ada).
Dengan demikian, yang dapat Anda lakukan adalah mengembalikan komit. Prosedur ini dilakukan secara berbeda (perintah berbeda) tergantung pada CVS yang Anda gunakan:
Di git :
git revert <commit>
Dengan lincah :
hg backout <REV>
EDIT:
Operasi pengembalian membuat komit baru yang melakukan kebalikan dari komit yang dibalik (misalnya jika komit asli menambahkan baris, komit pemulihan menghapus baris itu), secara efektif menghapus perubahan komit yang tidak diinginkan tanpa menulis ulang riwayat repositori.
git backout <REV>
? Atauhg backout <REV>
:?Jika Anda tidak bekerja dengan orang lain (atau dengan senang hati menyebabkan mereka sangat mengganggu) , maka dimungkinkan untuk menghapus komit dari cabang bitbucket.
Jika Anda mencoba mengubah cabang non-master:
jika Anda mencoba mengubah cabang master
Secara umum, cabang master tidak istimewa - itu hanya konvensi. Namun, bitbucket dan github dan situs serupa biasanya mengharuskan ada cabang utama (mungkin karena lebih mudah daripada menulis lebih banyak kode untuk menangani kejadian di mana repositori tidak memiliki cabang - tidak yakin). Jadi, Anda perlu membuat cabang baru, dan menjadikannya sebagai cabang utama:
Di Bitbucket, buka pengaturan repositori, dan ubah "Cabang utama" menjadi
master_temp
(di Github, ubah "Cabang default").Sekarang buka Bitbucket, dan Anda akan melihat riwayat yang Anda inginkan. Anda sekarang dapat pergi ke halaman pengaturan dan mengubah cabang Utama kembali ke
master
.Proses ini juga akan bekerja dengan perubahan riwayat lainnya (misalnya
git filter-branch
). Anda hanya perlu memastikan untuk menyetel ulang ke komitmen yang sesuai, sebelum riwayat baru dipisahkan dari yang lama.edit : tampaknya Anda tidak perlu repot-repot melakukan semua ini di github, karena Anda dapat memaksa-push cabang reset .
Berurusan dengan kolaborator yang kesal
Lain kali ada orang yang mencoba menarik dari repositori Anda, (jika mereka telah menarik komit buruk), penarikan akan gagal. Mereka secara manual harus mengatur ulang ke komit sebelum riwayat yang diubah, dan kemudian menarik lagi.
Jika mereka telah menarik komitmen buruk, dan berkomitmen di atasnya , maka mereka harus mengatur ulang, dan kemudian
git cherry-pick
komitmen baik yang ingin mereka buat, secara efektif membuat ulang seluruh cabang tanpa komit buruk.Jika mereka tidak pernah menarik komitmen buruk, maka seluruh proses ini tidak akan memengaruhi mereka, dan mereka dapat melakukannya seperti biasa.
sumber
Anda dapat mengatur ulang untuk
HEAD^
kemudian mendorongnya secara paksa.Ini akan menghapus komit terakhir Anda dan akan mencerminkan bitbucket sebagai komit dihapus tetapi akan tetap ada di server mereka.
sumber
Saya pernah mengalami masalah dengan git revert di masa lalu (terutama karena saya tidak begitu yakin cara kerjanya.) Saya mengalami masalah saat kembali karena masalah penggabungan ..
Solusi sederhana saya adalah ini.
Langkah 1.
proyek Anda di folder lain, lalu:
Langkah 2.
lalu Langkah 3.
di direktori proyek terbaru (dan utama) Anda (yang memiliki komit terakhir yang bermasalah) tempel file dari langkah 2
LANGKAH 4.
LANGKAH 5.
Nikmati
sumber
git revert
sederhana: ini membuat komit baru yang melakukan kebalikan dari perubahan dalam komit sebelumnya (atau beberapa komit). Itu tidak menghapus komit, jadi tidak relevan untuk pertanyaan ini. Selain itu, langkah kloning di sini tidak terlalu diperlukan.Berikut ini pendekatan sederhana hingga 4 langkah:
0 - Beri tahu tim bahwa Anda akan memperbaiki repositori
Terhubung dengan tim dan beri tahu mereka tentang perubahan yang akan datang.
1 - Hapus komit terakhir
Dengan asumsi cabang target Anda adalah
master
:Pada titik ini Anda selesai jika Anda bekerja sendiri.
2 - Perbaiki repositori lokal rekan satu tim Anda
Tentang rekan satu tim Anda:
Jika rekan setim Anda tidak memiliki komitmen baru, Anda sudah selesai pada titik ini dan Anda harus selaras.
3 - Mengembalikan komitmen yang hilang
Misalkan seorang rekan tim memiliki komit baru dan belum dipublikasikan yang hilang dalam proses ini.
Lakukan ini untuk sebanyak mungkin komitmen yang diperlukan.
Saya telah berhasil menggunakan pendekatan ini berkali-kali. Diperlukan upaya tim untuk memastikan semuanya sinkron.
sumber
Seperti yang dikatakan orang lain, biasanya Anda ingin menggunakan
hg backout
ataugit revert
. Namun, terkadang Anda benar-benar ingin menghilangkan commit.Pertama, Anda ingin pergi ke pengaturan repositori Anda. Klik
Strip commits
linknya.Masukkan ID kumpulan perubahan untuk kumpulan perubahan yang ingin Anda hancurkan, dan klik
Preview strip
. Itu akan membuat Anda melihat kerusakan seperti apa yang akan Anda lakukan sebelum Anda melakukannya. Kemudian klik sajaConfirm
dan komit Anda bukan lagi riwayat. Pastikan Anda memberi tahu semua kolaborator apa yang telah Anda lakukan, sehingga mereka tidak secara tidak sengaja mendorong kembali komitmen yang melanggar.sumber
Setelah perubahan dilakukan, perubahan tidak akan dapat dihapus. karena sifat dasar komit bukanlah untuk menghapus.
Hal yang dapat Anda lakukan (metode mudah dan aman),
Rebase Interaktif:
1)
git rebase -i HEAD~2
#akan menampilkan 2 komit terbaru Anda2) Komit Anda akan terdaftar seperti, Terbaru akan muncul di bagian bawah halaman LILO (terakhir di Keluar Terakhir)
Hapus baris komit terakhir seluruhnya
3) simpan dengan
ctrl+X
atauESC:wq
sekarang cabang Anda akan diperbarui tanpa komit terakhir Anda ..
sumber
Anda juga dapat menulis perintah untuk Bitbucket seperti yang disebutkan oleh Dustin :
Untuk menghapus komit terakhir secara lokal di git, gunakan:
sumber
Sekarang, bitbucket cloud (saya tidak yakin versi mana) memungkinkan untuk mengembalikan komit dari sistem file sebagai berikut (saya tidak melihat cara mengembalikan dari antarmuka Bitbucket di browser Chrome).
-cadangkan seluruh direktori Anda untuk mengamankan perubahan yang Anda lakukan secara tidak sengaja
-pilih direktori yang diperiksa
tombol kanan mouse: menu tortoise git
-repo-browser (opsi menu 'kembali' hanya membatalkan perubahan yang tidak dilakukan)
-tekan tombol HEAD
-pilih baris paling atas (komit terakhir)
-tombol kanan mouse: kembalikan perubahan dengan komit ini
-setelah itu membatalkan perubahan pada sistem file, tekan komit
-ini memperbarui GIT dengan pesan 'Kembalikan (pesan Anda sebelumnya). Ini mengembalikan komitmen ini dan itu '
-pilih 'komit dan dorong'.
sumber