Saya punya proyek di repositori jarak jauh, disinkronkan dengan repositori lokal (pengembangan) dan server satu (prod). Saya telah membuat beberapa perubahan yang sudah dilakukan yang didorong ke jarak jauh dan ditarik dari server. Sekarang, saya ingin membatalkan perubahan itu. Jadi saya bisa langsung git checkout
ke komit sebelum perubahan dan komit perubahan baru, tapi saya kira akan ada masalah untuk mendorong mereka lagi ke jarak jauh. Ada saran tentang bagaimana saya harus melanjutkan?
609
Jawaban:
Anda dapat mengembalikan komitmen individu dengan:
Ini akan membuat komit baru yang mengembalikan perubahan komit yang Anda tentukan. Perhatikan bahwa itu hanya mengembalikan komit tertentu, dan tidak melakukan setelah itu. Jika Anda ingin mengembalikan serangkaian komitmen, Anda dapat melakukannya seperti ini:
Ini mengembalikan komit antara dan termasuk komit yang ditentukan.
Lihatlah halaman manual git-revert untuk informasi lebih lanjut tentang
git revert
perintah ini. Lihat juga jawaban ini untuk informasi lebih lanjut tentang mengembalikan komit.sumber
git log
<oldest_commit_hash>
dimasukkan dalam daftar revertsSolusi yang tidak menyimpan jejak "undo".
CATATAN: jangan lakukan ini jika seseorang sudah menarik perubahan Anda (saya hanya akan menggunakan ini pada repo pribadi saya)
melakukan:
ini akan memeriksa ulang semua pembaruan secara lokal (jadi status git akan mencantumkan semua file yang diperbarui)
maka Anda "melakukan pekerjaan Anda" dan komit kembali perubahan Anda (Catatan: langkah ini opsional)
Pada saat ini pohon lokal Anda berbeda dari jarak jauh
akan mendorong dan memaksa jarak jauh untuk mempertimbangkan dorongan ini dan menghapus yang sebelumnya (menentukan nama jarak jauh dan nama cabang tidak wajib tetapi disarankan untuk menghindari memperbarui semua cabang dengan bendera pembaruan).
!! hati-hati beberapa tag mungkin masih menunjukkan komit yang dihapus !! cara-menghapus-a-remote-tag
sumber
git push -f
komit yang benar terakhir dan riwayat jauh dibersihkan! Terima kasih!Apa yang saya lakukan dalam kasus ini adalah:
Di server, pindahkan kursor kembali ke komit baik terakhir yang diketahui:
Secara lokal, lakukan hal yang sama:
Lihat contoh lengkap tentang cabang
my_new_branch
yang saya buat untuk tujuan ini:Ini adalah sejarah terbaru setelah menambahkan beberapa hal ke
myfile.py
:Saya ingin menyingkirkan komit terakhir, yang sudah didorong, jadi saya jalankan:
Bagus! Sekarang saya melihat file yang diubah pada komit itu (
myfile.py
) menunjukkan "tidak dipentaskan untuk komit":Karena saya tidak ingin perubahan ini, saya hanya memindahkan kursor kembali secara lokal juga:
Jadi sekarang HEAD ada di komit sebelumnya, baik di lokal maupun jarak jauh:
sumber
Anda dapat REVERT (atau Anda juga bisa menyebutnya HAPUS ) Git Commit BOTH Locally dan Remotely jika Anda mengikuti langkah-langkah seperti yang diberikan di bawah ini melalui baris perintah git.
Jalankan perintah berikut untuk melihat id komit yang ingin Anda kembalikan
Anda akan mendapatkan seperti tangkapan layar berikut
Jika Anda juga memeriksa jarak jauh (melalui Antarmuka Web) maka Anda dapat melihat bahwa ini akan sama seperti yang ditunjukkan di bawah ini
Sesuai tangkapan layar saat ini Anda sedang berada di commit id e110322 namun Anda ingin kembali ke 030bbf6 KEDUA LOKAL dan REMOTELY .
Lakukan langkah-langkah berikut untuk HAPUS / REVERT Komit Lokal + Jarak Jauh
Pertama Secara Lokal Mengembalikan untuk melakukan id 030bbf6
diikuti oleh
Kedua perintah clean force reset untuk melakukan stage 030bbf6 seperti yang ditunjukkan di bawah ini dalam snapshot
sekarang jika Anda menjalankan git status maka Anda akan melihat bahwa Anda DUA Komit DIBALIK dari cabang jarak jauh seperti yang ditunjukkan di bawah ini
Jalankan berikut untuk memperbarui indeks Anda (jika ada pembaruan). Disarankan agar Anda meminta semua pengembang untuk tidak menerima permintaan penarikan apa pun di cabang jarak jauh utama.
Setelah Anda selesai dengan itu maka Anda diminta untuk Push komit ini secara paksa dengan menggunakan simbol + di depan cabang seperti yang ditunjukkan di bawah ini. Saya telah menggunakan di sini sebagai cabang utama , Anda dapat menggantinya dengan apa saja
Kode
sekarang jika Anda melihat antarmuka web dari remote maka komit di sana harus dikembalikan juga.
sumber
Ini akan menghapus komit Anda yang didorong
sumber
Pada baris kode di atas. "Argumen terakhir mewakili"
1 - mengembalikan satu komit.
2 - mengembalikan dua komit terakhir.
n - mengembalikan n terakhir yang dilakukan.
Anda perlu menekan setelah perintah ini untuk mengambil efek pada jarak jauh. Anda memiliki opsi lain seperti menentukan rentang komitmen untuk kembali. Ini adalah salah satu opsi.
Kemudian gunakan
git commit -am "COMMIT_MESSAGE"
itugit push
ataugit push -f
sumber
git revert ref1..ref2
2020 Cara sederhana:
(Hash dari commit terakhir yang ingin Anda pertahankan).
Anda akan menyimpan perubahan yang sekarang tidak dikomit secara lokal.
Jika Anda ingin mendorong lagi, Anda harus melakukan:
sumber
Inilah cara saya:
Katakanlah nama cabang adalah
develop
.sumber
Anda dapat melakukan sesuatu seperti
sumber