Bagaimana cara mengembalikan dari kondisi saya saat ini ke snapshot yang dibuat pada komit tertentu?
Jika saya melakukannya git log
, maka saya mendapatkan output berikut:
$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <[email protected]>
Date: Thu Nov 4 18:59:41 2010 -0400
blah blah blah...
commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <[email protected]>
Date: Thu Nov 4 05:13:39 2010 -0400
more blah blah blah...
commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <[email protected]>
Date: Thu Nov 4 00:55:06 2010 -0400
And yet more blah blah...
commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <[email protected]>
Date: Wed Nov 3 23:56:08 2010 -0400
Yep, more blah blah.
Bagaimana saya kembali ke komit mulai 3 November, yaitu komit 0d1d7fc
?
git
git-checkout
git-reset
git-revert
Orang gila
sumber
sumber
Jawaban:
Ini sangat tergantung pada apa yang Anda maksud dengan "kembalikan".
Beralih sementara ke komit yang berbeda
Jika Anda ingin sementara kembali ke sana, main-main, lalu kembali ke tempat Anda sekarang, yang harus Anda lakukan adalah memeriksa komit yang diinginkan:
Atau jika Anda ingin membuat komitmen saat berada di sana, silakan dan buat cabang baru saat Anda berada di sana:
Untuk kembali ke tempat Anda berada sekarang, periksa cabang tempat Anda berada lagi. (Jika Anda telah membuat perubahan, seperti biasa ketika berpindah cabang, Anda harus menghadapinya sebagaimana mestinya. Anda dapat mengatur ulang untuk membuangnya; Anda dapat menyimpan, checkout, menyimpan pop untuk membawanya, Anda dapat melakukan mereka ke cabang di sana jika Anda ingin cabang di sana.)
Sulit menghapus komitmen yang tidak dipublikasikan
Sebaliknya, jika Anda ingin benar-benar menyingkirkan semua yang telah Anda lakukan sejak itu, ada dua kemungkinan. Pertama, jika Anda belum menerbitkan salah satu dari komitmen ini, cukup setel ulang:
Jika Anda kacau, Anda sudah membuang perubahan lokal Anda, tetapi Anda setidaknya bisa kembali ke tempat Anda sebelumnya dengan mengatur ulang.
Batalkan komitmen yang dipublikasikan dengan komitmen baru
Di sisi lain, jika Anda telah menerbitkan karya, Anda mungkin tidak ingin mengatur ulang cabang, karena itu secara efektif menulis ulang sejarah. Dalam hal ini, Anda memang dapat mengembalikan komit. Dengan Git, kembalikan memiliki arti yang sangat spesifik: buat komit dengan tambalan terbalik untuk membatalkannya. Dengan cara ini Anda tidak menulis ulang riwayat apa pun.
The
git-revert
manualnya sebenarnya mencakup banyak ini dalam deskripsi. Tautan lain yang bermanfaat adalah bagian git-scm.com yang membahas git-revert .Jika Anda memutuskan bahwa Anda tidak ingin mengembalikannya, Anda dapat mengembalikannya (seperti dijelaskan di sini) atau mengatur ulang kembali sebelum kembali (lihat bagian sebelumnya).
Anda juga dapat menemukan jawaban ini bermanfaat dalam kasus ini:
Bagaimana cara memindahkan HEAD kembali ke lokasi sebelumnya? (Kepala terpisah)
sumber
git revert HEAD~3
sebagai wat terbaik untuk kembali3
komit adalah am konvensi penting.git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
git revert --no-commit hash1 hash2 ...
dan setelah ini, lakukan saja setiap pengembalian dalam satu komitgit commit -m "Message"
Banyak jawaban rumit dan berbahaya di sini, tetapi sebenarnya mudah:
Ini akan mengembalikan segala sesuatu dari HEAD kembali ke hash komit, yang berarti akan membuat ulang kondisi komit di pohon kerja seolah-olah setiap komit sejak telah berjalan kembali. Anda kemudian dapat mengkomit pohon saat ini, dan itu akan membuat komit baru yang pada dasarnya setara dengan komit yang Anda "kembalikan".
(Itu
--no-commit
Bendera memungkinkan git mengembalikan semua komit sekaligus - jika tidak, Anda akan diminta pesan untuk setiap komit di dalam rentang, mengotori riwayat Anda dengan komit baru yang tidak perlu.)Ini adalah cara yang aman dan mudah untuk mengembalikan ke keadaan sebelumnya . Tidak ada riwayat yang dimusnahkan, sehingga dapat digunakan untuk komitmen yang telah dipublikasikan.
sumber
--no-edit
bukan--no-commit
, sehingga Anda tidak perlu mengedit pesan komit untuk setiap pengembalian.git diff --cached
.$ git revert --no-commit 53742ae..HEAD
kembalifatal: empty commit set passed
81bcc9e HEAD{0}; e475924 HEAD{1}, ...
(darigit reflog
), dan saya ingin membatalkan apa yang saya lakukan81bcc9e
, maka saya harus melakukannyagit revert e475924..HEAD
Rogue Coder?
Bekerja sendiri dan hanya ingin itu berhasil? Ikuti instruksi di bawah ini, mereka telah bekerja dengan andal untuk saya dan banyak lainnya selama bertahun-tahun.
Bekerja dengan orang lain? Git itu rumit. Baca komentar di bawah jawaban ini sebelum Anda melakukan sesuatu yang gegabah.
Mengembalikan Copy Pekerjaan ke Komit Terkini
Untuk kembali ke komitmen sebelumnya, abaikan perubahan apa pun:
di mana HEAD adalah komit terakhir di cabang Anda saat ini
Mengembalikan Copy Pekerjaan ke Komit yang Lama
Untuk kembali ke komit yang lebih lama dari komit terbaru:
Kredit pergi ke pertanyaan Stack Overflow serupa, Kembalikan ke komit oleh hash SHA di Git? .
sumber
git reset --hard 56e05fc; git reset --soft HEAD@{1}; git commit
.Opsi terbaik untuk saya dan mungkin yang lain adalah opsi reset Git:
Ini telah menjadi pilihan terbaik bagi saya! Sederhana, cepat dan efektif!
Juga dari komentar, jika Anda menginginkan metode yang kurang 'gampang' yang bisa Anda gunakan
sumber
git push -f
bendera .. Tapi hati-hati, itu akan menimpa remote .. Pastikan Anda tahu apa yang ingin Anda lakukan ...Sebelum menjawab, mari tambahkan beberapa latar belakang, jelaskan apa ini
HEAD
.First of all what is HEAD?
HEAD
hanyalah referensi ke komit saat ini (terbaru) di cabang saat ini. Hanya ada satuHEAD
pada waktu tertentu (tidak termasukgit worktree
).Konten
HEAD
disimpan di dalam.git/HEAD
, dan mengandung 40 byte SHA-1 dari komit saat ini.detached HEAD
Jika Anda tidak menggunakan komit terbaru - artinya
HEAD
menunjuk komit sebelumnya dalam sejarah, itu disebutdetached HEAD
.Pada baris perintah akan terlihat seperti ini - SHA-1 bukan nama cabang karena
HEAD
tidak menunjuk ke ujung cabang saat ini:Beberapa opsi tentang cara memulihkan dari HEAD yang terpisah:
git checkout
Ini akan mengecek cabang baru yang menunjuk ke komit yang diinginkan. Perintah ini akan checkout ke komit yang diberikan.
Pada titik ini Anda dapat membuat cabang dan mulai bekerja dari titik ini pada:
git reflog
Anda selalu dapat menggunakan itu
reflog
juga.git reflog
akan menampilkan perubahan apa pun yang memperbaruiHEAD
dan memeriksa entri reflog yang diinginkan akan mengaturHEAD
kembali komitmen ini.Setiap kali KEPALA diubah akan ada entri baru di
reflog
Ini akan membuat Anda kembali ke komit yang Anda inginkan
git reset HEAD --hard <commit_id>
"Gerakkan" kepala Anda kembali ke komit yang diinginkan.
git rebase --no-autostash
.Skema ini menggambarkan perintah mana melakukan apa. Seperti yang Anda lihat ada
reset && checkout
modifikasiHEAD
.sumber
git reflog
, itulah yang saya butuhkangit reset HEAD^
--hard`Jika Anda ingin "uncommit", hapus pesan komit terakhir, dan kembalikan file yang dimodifikasi ke dalam pementasan, Anda akan menggunakan perintah:
--soft
menunjukkan bahwa file yang tidak dikomit harus disimpan sebagai file yang berfungsi yang berlawanan dengan--hard
yang akan dibuang.HEAD~1
adalah komit terakhir. Jika Anda ingin mengembalikan komitmen, Anda dapat menggunakannyaHEAD~3
. Jika Anda ingin mengembalikan ke nomor revisi tertentu, Anda juga bisa melakukannya menggunakan hash SHA-nya.Ini adalah perintah yang sangat berguna dalam situasi di mana Anda melakukan hal yang salah dan Anda ingin membatalkan komitmen terakhir itu.
Sumber: http://nakkaya.com/2009/09/24/git-delete-last-commit/
sumber
Anda dapat melakukan ini dengan dua perintah berikut:
Ini akan menghapus komit Git Anda sebelumnya.
Jika Anda ingin menyimpan perubahan, Anda juga dapat menggunakan:
Maka itu akan menyimpan perubahan Anda.
sumber
Saya telah mencoba banyak cara untuk mengembalikan perubahan lokal di Git, dan tampaknya ini bekerja paling baik jika Anda hanya ingin kembali ke keadaan komit terbaru.
Deskripsi Singkat:
git revert
halnya.git checkout <commithashcode>
halnya.Saya menemukan cara yang jauh lebih mudah dan sederhana untuk mencapai hasil di atas:
di mana HEAD menunjuk komit terbaru pada Anda cabang saat ini.
Ini adalah kode kode yang sama seperti yang disarankan boulder_ruby, tetapi saya telah menambahkan
git add .
sebelumnyagit reset --hard HEAD
untuk menghapus semua file baru yang dibuat sejak komit terakhir karena ini adalah apa yang kebanyakan orang harapkan saya percaya ketika kembali ke komit terbaru.sumber
BAIK, kembali ke komit sebelumnya di Git cukup mudah ...
Kembalikan kembali tanpa menyimpan perubahan:
Kembalikan kembali dengan menyimpan perubahan:
Penjelasan: menggunakan
git reset
, Anda dapat mengatur ulang ke kondisi tertentu. Sudah biasa menggunakannya dengan hash komit seperti yang Anda lihat di atas.Tapi seperti yang Anda lihat perbedaannya menggunakan dua flag
--soft
dan--hard
, secara defaultgit reset
menggunakan--soft
flag, tapi itu praktik yang baik selalu menggunakan flag, saya jelaskan setiap flag:--lembut
Bendera default seperti yang dijelaskan, tidak perlu menyediakannya, tidak mengubah pohon yang berfungsi, tetapi ia menambahkan semua file yang berubah siap untuk dikomit, jadi Anda kembali ke status komit yang perubahan pada file menjadi tidak bertahap.
--keras
Hati-hati dengan bendera ini. Ini me-reset pohon yang berfungsi dan semua perubahan untuk melacak file dan semua akan hilang!
Saya juga membuat gambar di bawah ini yang mungkin terjadi dalam kehidupan nyata bekerja dengan Git:
sumber
git reset
adalahgit reset --mixed
, bukangit reset --soft
. Silakan periksa Apa perbedaan antara reset git --mixed, --soft, dan --hard? dan Dalam bahasa Inggris biasa, apa yang dilakukan “git reset”?Dengan asumsi Anda berbicara tentang master dan pada cabang masing-masing (yang mengatakan, ini bisa menjadi cabang kerja yang Anda khawatirkan):
Saya menemukan jawabannya dari dalam posting blog (sekarang tidak ada lagi)
Perhatikan bahwa ini adalah Reset dan Memaksa perubahan ke remote, sehingga jika orang lain di tim Anda sudah git menarik, Anda akan menimbulkan masalah bagi mereka. Anda menghancurkan sejarah perubahan, yang merupakan alasan penting mengapa orang menggunakan git.
Lebih baik menggunakan kembali (lihat jawaban lain) daripada mengatur ulang. Jika Anda tim satu orang maka mungkin tidak masalah.
sumber
Katakanlah Anda memiliki komit berikut dalam file teks bernama
~/commits-to-revert.txt
(Saya biasagit log --pretty=oneline
mendapatkannya)Buat skrip Bash shell untuk mengembalikan masing-masing:
Ini mengembalikan semuanya kembali ke keadaan sebelumnya, termasuk kreasi file dan direktori, dan penghapusan, komit ke cabang Anda dan Anda mempertahankan histori, tetapi Anda mengembalikannya ke struktur file yang sama. Mengapa Git tidak memiliki
git revert --to <hash>
adalah di luar saya.sumber
git revert HEAD~3
untuk menghapus 3 komit terakhirgit revert -n master~3..master~1
bekerja (Seperti yang terlihat dari kernel.org/pub/software/scm/git/docs/git-revert.html )git revert --no-commit <start>..<end>
, karenagit revert
menerima rentang komit dalam versi Git yang baru (atau semua?). Perhatikan bahwa awal rentang tidak termasuk dalam pengembalian.Alternatif Ekstra untuk Solusi Jefromi
Solusi Jefromi jelas yang terbaik, dan Anda harus menggunakannya. Namun, demi kelengkapan, saya juga ingin menunjukkan solusi alternatif lain yang juga dapat digunakan untuk mengembalikan komit (dalam arti bahwa Anda membuat komit baru yang membatalkan perubahan komit sebelumnya , sama seperti apa yang
git revert
dilakukan).Agar lebih jelas, alternatif ini bukan cara terbaik untuk mengembalikan komit , solusi Jefromi adalah , tetapi saya hanya ingin menunjukkan bahwa Anda juga dapat menggunakan metode lain ini untuk mencapai hal yang sama
git revert
.Alternatif 1: Reset Keras dan Lunak
Ini adalah versi yang sangat sedikit dimodifikasi dari solusi Charles Bailey untuk Kembali ke komit oleh hash SHA di Git? :
Ini pada dasarnya bekerja dengan menggunakan fakta bahwa soft reset akan meninggalkan status komit sebelumnya yang dipentaskan dalam area indeks / staging, yang kemudian dapat Anda komit.
Alternatif 2: Hapus Pohon Saat Ini dan Ganti dengan yang Baru
Solusi ini berasal dari solusi svick untuk Checkout komit lama dan menjadikannya komit baru :
Demikian pula dengan alternatif # 1, ini mereproduksi keadaan
<commit>
dalam copy pekerjaan saat ini. Hal ini perlu dilakukangit rm
terlebih dahulu karenagit checkout
tidak akan menghapus file yang telah ditambahkan sejak itu<commit>
.sumber
git revert HEAD~2..HEAD
dari solusi terkait @ Cascabel (@ Jefromi). Saya tidak melihat masalahnya.Berikut adalah cara yang lebih sederhana untuk kembali ke komit sebelumnya (dan membuatnya dalam keadaan tidak terikat, untuk melakukan apa pun yang Anda suka):
Jadi, tidak perlu untuk melakukan id dan sebagainya :)
sumber
Ada perintah (bukan bagian dari core Git, tetapi ada dalam paket git-extras ) khusus untuk mengembalikan dan mementaskan commit lama:
Per halaman manual , itu juga dapat digunakan seperti:
sumber
Cara terbaik adalah:
Ini akan mengatur ulang cabang ke komit tertentu dan kemudian akan mengunggah server jauh dengan komit yang sama seperti yang Anda miliki di lokal (ini akan sepenuhnya menghilangkan perintah setelah komit tertentu)
Hati-hati dengan
--force
bendera menghapus semua komit berikutnya setelah komit yang dipilih tanpa opsi untuk memulihkannya.sumber
Setelah semua perubahan, saat Anda mendorong semua perintah ini, Anda mungkin harus menggunakan:
Dan tidak hanya itu
git push
.sumber
Anda bisa menyelesaikan semua langkah awal ini sendiri dan mendorong kembali ke repositori Git.
Tarik versi terbaru repositori Anda dari Bitbucket menggunakan
git pull --all
perintah.Jalankan perintah Git log dengan
-n 4
dari terminal Anda. Angka setelah-n
menentukan jumlah komit dalam log mulai dari komit terbaru dalam sejarah lokal Anda.Setel ulang kepala riwayat repositori Anda menggunakan di
git reset --hard HEAD~N
mana N adalah jumlah komit yang ingin Anda ambil kembali. Dalam contoh berikut ini, head akan mengembalikan satu komit, ke komit terakhir dalam riwayat repositori:Dorong perubahan ke repositori Git menggunakan
git push --force
untuk memaksa mendorong perubahan.Jika Anda ingin repositori Git melakukan commit sebelumnya:
sumber
Kembalikan ke komit terbaru dan abaikan semua perubahan lokal:
sumber
Pilih komit yang diperlukan Anda, dan periksa dengan
sampai Anda mendapatkan komit yang diperlukan. Untuk membuat KEPALA menunjukkan hal itu, lakukan
atau
git reset --hard HEAD~2
atau apalah.sumber
git show HEAD
setara dengan hanya menggunakangit log HEAD -1
.Jika situasinya mendesak , dan Anda hanya ingin melakukan apa yang diminta penanya dengan cepat dan kotor , anggap proyek Anda berada di bawah direktori yang disebut, misalnya, "proyek saya":
CEPAT DAN KOTOR : tergantung pada keadaan, cepat dan kotor mungkin sebenarnya sangat BAIK. Apa solusi saya di sini adalah TIDAK mengganti file yang Anda miliki dalam direktori kerja dengan file yang ditarik / diekstraksi dari kedalaman repositori git yang bersembunyi di bawah direktori .git / Anda menggunakan perintah git yang sangat pintar dan sangat kuat, di antaranya ada banyak. ANDA TIDAK HARUS MELAKUKAN PENYIMPANAN TERSEBUT TERSEBUT DI LAUT UNTUK MEMULIHKAN apa yang kelihatannya merupakan situasi bencana, dan upaya untuk melakukannya tanpa keahlian yang memadai dapat berakibat fatal .
Salin seluruh direktori dan sebut itu sesuatu yang lain, seperti "proyek saya - salin". Dengan asumsi file repositori git Anda ("repo") berada di bawah direktori "proyek saya" (tempat default untuk mereka, di bawah direktori yang disebut ".git"), Anda sekarang akan menyalin file kerja dan file repo Anda.
Lakukan ini di direktori "proyek saya":
Ini akan mengembalikan status repo di bawah "proyek saya" ke keadaan semula ketika Anda membuat komit ("komit" berarti snapshot dari file Anda yang sedang bekerja). Semua komitmen sejak saat itu akan hilang selamanya di bawah "proyek saya", TAPI ... mereka masih akan ada dalam repo di bawah "proyek saya - salin" karena Anda menyalin semua file - termasuk yang ada di ... /. Git /.
Anda kemudian memiliki dua versi di sistem Anda ... Anda dapat memeriksa atau menyalin atau memodifikasi file yang menarik, atau apa pun, dari komit sebelumnya. Anda dapat benar-benar membuang file di bawah "proyek saya - salin", jika Anda telah memutuskan pekerjaan baru sejak komit yang dipulihkan tidak akan kemana-mana ...
Hal yang jelas jika Anda ingin melanjutkan dengan keadaan proyek tanpa benar-benar membuang pekerjaan karena komit yang diambil ini adalah mengubah nama direktori Anda lagi: Hapus proyek yang mengandung komit yang diambil (atau berikan nama sementara) dan ganti nama Anda " proyek saya - salin "direktori kembali ke" proyek saya ". Maka mungkin cobalah untuk memahami beberapa jawaban lain di sini, dan mungkin melakukan komitmen lain dengan segera.
Git adalah ciptaan yang brilian tetapi sama sekali tidak ada yang bisa "mengambilnya dengan cepat": juga orang yang mencoba menjelaskannya terlalu sering mengasumsikan pengetahuan sebelumnya tentang VCS [Sistem Kontrol Versi] lainnya dan menggali terlalu jauh ke dalam terlalu cepat, dan melakukan kejahatan lain, seperti menggunakan istilah yang dapat dipertukarkan untuk "memeriksa" - dengan cara yang kadang-kadang tampak hampir diperhitungkan untuk membingungkan pemula.
Untuk menghemat banyak stres, belajarlah dari bekas luka saya. Anda harus membaca buku tentang Git - saya akan merekomendasikan "Kontrol Versi dengan Git" . Lakukan lebih cepat daripada nanti. Jika ya, ingatlah bahwa banyak kerumitan Git berasal dari percabangan dan kemudian dibuat ulang: Anda dapat melewati bagian-bagian itu di buku mana pun. Dari pertanyaan Anda, tidak ada alasan mengapa orang harus membutakan Anda dengan sains .
Terutama jika, misalnya, ini adalah situasi yang menyedihkan dan Anda seorang pemula dengan Git!
PS: Satu pemikiran lain: Ini (sekarang) sebenarnya cukup sederhana untuk menyimpan repo Git di direktori selain dari yang memiliki file yang berfungsi. Ini berarti Anda tidak perlu menyalin seluruh repositori Git menggunakan solusi cepat & kotor di atas. Lihat jawabannya oleh Fryer gunakan di
--separate-git-dir
sini . Namun, berhati-hatilah : Jika Anda memiliki repositori "direktori terpisah" yang tidak Anda salin, dan Anda melakukan hard reset, semua versi setelah commit reset akan hilang selamanya, kecuali jika Anda memiliki, seperti yang seharusnya, secara teratur mencadangkan repositori Anda, lebih disukai ke Cloud (mis. Google Drive ) di antara tempat-tempat lain.Mengenai masalah "mencadangkan ke Cloud", langkah selanjutnya adalah membuka akun (gratis tentu saja) dengan GitHub atau (lebih baik dalam pandangan saya) GitLab . Anda kemudian dapat secara teratur melakukan
git push
perintah untuk membuat repo Cloud Anda mutakhir "dengan benar". Tetapi sekali lagi, membicarakan hal ini mungkin terlalu cepat.sumber
Ini adalah satu lagi cara untuk mengatur ulang secara langsung ke komit terbaru
Itu secara langsung menghapus semua perubahan yang telah Anda buat sejak komit terakhir.
PS: Ada sedikit masalah; itu juga menghapus semua perubahan simpanan Anda yang baru disimpan. Yang saya kira dalam banyak kasus seharusnya tidak masalah.
sumber
Untuk benar-benar membersihkan direktori pembuat kode dari beberapa perubahan yang tidak disengaja, kami menggunakan:
Hanya
git reset --hard HEAD
akan menghilangkan modifikasi, tetapi itu tidak akan menyingkirkan file "baru". Dalam kasus mereka, mereka secara tidak sengaja menyeret folder penting di suatu tempat secara acak, dan semua file itu diperlakukan sebagai baru oleh Git, jadi filereset --hard
tidak memperbaikinya. Dengan menjalankangit add -A .
sebelumnya, ia secara eksplisit melacak mereka semua dengan git, untuk dihapus oleh reset.sumber
Untuk menjaga perubahan dari komit sebelumnya ke HEAD dan pindah ke komit sebelumnya, lakukan:
Jika perubahan tidak diperlukan dari komit sebelumnya ke HEAD dan buang semua perubahan, lakukan:
sumber
Saya percaya beberapa orang mungkin datang ke pertanyaan ini ingin tahu bagaimana mengembalikan perubahan yang dilakukan pada tuannya - yaitu membuang semuanya dan kembali ke asal / master, dalam hal ini, lakukan ini:
/superuser/273172/how-to-reset-master-to-origin-master
sumber
Kembalikan adalah perintah untuk mengembalikan komit.
Sampel:
git revert 2h3h23233
Itu mampu mengambil jarak dari KEPALA seperti di bawah ini. Di sini saya mengatakan "kembalikan komit terakhir."
git revert HEAD~1..HEAD
dan kemudian lakukan
git push
sumber
Cobalah mengatur ulang ke komit yang diinginkan -
git reset <COMMIT_ID>
(untuk memeriksa penggunaan COMMIT_ID
git log
)Ini akan mengatur ulang semua file yang diubah ke status tidak ditambahkan.
Sekarang Anda dapat
checkout
menghapus semua file dengangit checkout .
Periksa
git log
untuk memverifikasi perubahan Anda.MEMPERBARUI
Jika Anda memiliki satu dan hanya komit di repo Anda, cobalah
git update-ref -d HEAD
sumber
Saat komit Anda didorong dari jarak jauh, Anda harus menghapusnya. Biarkan saya menganggap cabang Anda berkembang dan didorong asal .
Anda harus terlebih dahulu menghapus pengembangan dari asal :
Maka Anda perlu mengembangkan ke status yang Anda inginkan, izinkan saya menganggap hash komit adalah EFGHIJK:
Terakhir, dorong berkembang lagi:
sumber
Saya memiliki masalah serupa dan ingin kembali ke komit sebelumnya. Dalam kasus saya, saya tidak tertarik untuk menyimpan komit yang lebih baru, maka saya gunakan
Hard
.Beginilah cara saya melakukannya:
Ini akan kembali ke repositori lokal, dan di sini setelah menggunakan
git push -f
akan memperbarui repositori jarak jauh.sumber
Di GitKraken Anda dapat melakukan ini:
Klik kanan pada komit yang ingin Anda reset, pilih: Reset ke komit ini / Hard :
Klik kanan pada komit lagi, pilih: Nama cabang saat ini / Push :
Klik pada Push Angkatan :
Obs. : Anda harus berhati-hati, karena semua riwayat komit setelah hard reset hilang dan tindakan ini tidak dapat dibatalkan. Anda harus yakin apa yang Anda lakukan.
sumber
Jika Anda ingin memperbaiki beberapa kesalahan pada komit terakhir, alternatif yang baik akan menggunakan perintah git commit --amend . Jika komit terakhir tidak diarahkan oleh referensi, ini akan melakukan trik, karena membuat komit dengan induk yang sama dengan komit terakhir. Jika tidak ada referensi ke komit terakhir, komis tersebut akan dibuang dan komit ini akan menjadi komit terakhir. Ini adalah cara yang baik untuk mengoreksi komitmen tanpa mengembalikan komitmen. Namun memiliki keterbatasan sendiri.
sumber