Lebih
Reset remote tertentu melakukan
Aku ingin membuang semua perubahan yang dilakukan setelah melakukan <commit-hash>
.
Jadi yang saya lakukan:
git reset --hard <commit-hash>
Sekarang saya ingin melakukan hal yang sama dengan saya remote. Bagaimana saya bisa melakukan ini? Saya telah melakukan beberapa melakukan (dan mendorong) setelah <commit-hash>
dan aku hanya ingin membuang mereka semua. Ini hanya sesuatu yang pergi sangat salah di jalan dan aku don't ingin membuatnya lebih buruk dari itu sudah. ;(
Pada dasarnya saya ingin mundur saya asal/master
menjadi <commit-hash>
629
8
Dengan asumsi bahwa cabang ini disebut
guru
baik di sini maupun jarak jauh, dan bahwa anda remote disebutasal
yang bisa anda lakukan:Namun, anda harus menghindari melakukan hal ini jika orang lain bekerja dengan repositori jauh dan telah ditarik perubahan. Dalam kasus itu, akan lebih baik untuk kembali komit bahwa anda don't ingin, kemudian dorong seperti biasa.
Update: anda've dijelaskan di bawah ini bahwa orang lain telah ditarik perubahan yang anda've mendorong, sehingga's baik untuk membuat yang baru melakukan yang mengembalikan semua perubahan tersebut. Ada's nice penjelasan dari anda pilihan untuk melakukan hal ini di ini jawaban dari Jakub Narębski. Mana yang paling nyaman tergantung pada berapa banyak berkomitmen ingin anda kembalikan, dan metode mana yang paling masuk akal untuk anda.
Sejak dari pertanyaan anda itu's jelas bahwa anda telah menggunakan git reset --hard
untuk me-reset
mastercabang, anda mungkin perlu untuk memulai dengan menggunakan git reset --hard ORIG_HEAD
untuk pindah ke cabang anda kembali ke tempat itu sebelumnya. (Seperti biasa dengangit reset --hard
, pastikan bahwagit status
bersih, bahwa kamu're pada cabang kanan dan bahwa anda're menyadarigit reflog
sebagai alat untuk memulihkan rupanya komit hilang.) Anda juga harus memeriksa bahwaORIG_HEAD
poin ke kanan komit, dengangit show ORIG_HEAD
.Pemecahan masalah:
Jika anda mendapatkan pesan seperti "! [remote ditolak] a60f7d85 -> guru (pre-menerima hook menurun)"
maka anda harus mengizinkan cabang menulis ulang sejarah untuk cabang tertentu. Di BitBucket misalnya dikatakan "menulis Ulang cabang sejarah tidak diperbolehkan". Ada kotak centang yang bernama
Memungkinkan menulis ulang cabang sejarah
yang harus anda periksa.Gunakan jawaban yang lain jika anda don't keberatan kehilangan perubahan lokal. Metode ini masih dapat wreck jauh anda jika anda salah memilih melakukan hash untuk kembali ke.
Jika anda hanya ingin membuat remote pertandingan komit bahwa's sudah di cabang lokal anda:
untuk menemukan hash komit ingin anda remote yang harus di.
git log -puntuk melihat perubahan, atau
git log --graph-semua-oneline --menghias` untuk melihat pohon kompak. (Setelah yang terakhir sebagai alias dalam tempurung ini sangat berguna.)git push --force <-hash>:
misalnya
git push --force asal 606fdfaa33af1844c86f4267a136d4666e576cdc:master
Aku memecahkan masalah seperti milik anda dengan perintah ini:
Pada GitLab, anda mungkin harus mengatur cabang ke terlindungi sebelum melakukan hal ini. Anda dapat melakukan ini di [repo] > Pengaturan > Repositori > Dilindungi Cabang. Maka metode dari Mark's jawaban yang bekerja.
Jika anda ingin versi sebelumnya dari file, saya akan merekomendasikan menggunakan git checkout.
Melakukan hal ini akan mengirim anda kembali dalam waktu, hal itu tidak mempengaruhi keadaan saat ini proyek anda, anda dapat datang ke mainline git checkout mainline
tetapi ketika anda menambahkan file dalam argumen, bahwa berkas dibawa kembali ke anda dari waktu sebelumnya untuk proyek anda saat ini, yaitu proyek anda saat ini berubah dan perlu dilakukan.
Keuntungan dari ini adalah bahwa hal itu tidak menghapus sejarah, dan juga tidak kembali kode tertentu perubahan (git kembali)
Cek lebih lanjut di sini https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout
Saya dua sen untuk jawaban sebelumnya: jika
masih doesn't bekerja, anda mungkin ingin mengedit
<anda-remote-repo>.git/config
file's menerima bagian:Jika anda branch pengembangan atau produksi, cara termudah untuk mencapai hal ini adalah ulang tertentu melakukan secara lokal dan membuat cabang baru dari sana. Anda dapat menggunakan:
git checkout 000000
(di mana 000000 adalah komit id di mana anda ingin pergi) anda bermasalah cabang dan kemudian hanya membuat cabang baru:
git remote add [name_of_your_remote]
Kemudian anda dapat membuat yang baru PR dan semua akan bekerja dengan baik!
Lakukan satu hal, dapatkan komit's SHA no. seperti 87c9808 dan kemudian,
git push --force asal master