Bagaimana cara membatalkan commit terbaru di git?

Saya tidak sengaja mengirim file yang salah ke Git , tetapi saya belum mengirim komit ke server.

Bagaimana saya bisa membatalkan komitmen ini dari repositori lokal?

18990
29 мая '09 в 21:09 2009-05-29 21:09 Hamza Yerlikaya bertanya pada 29 Mei 2009 pada 21:09 2009-05-29 21:09
@ 92 balasan

Batalkan dan u>

29 мая '09 в 21:13 2009-05-29 21:13 balasan diberikan oleh Esko Luontola 29 Mei 2009 di 21:13 2009-05-29 21:13

Membatalkan komit agak menakutkan jika Anda tidak tahu cara kerjanya. Tetapi sebenarnya sangat mudah, jika Anda mengerti.

Katakanlah Anda memilikinya, di mana C adalah KEPALA Anda, dan (F) adalah status file Anda.

  (F) ABC ↑ master 

Anda ingin mengatur u> . Anda melakukan ini:

 git reset --hard HEAD~1 

Hasil:

  (F) AB ↑ master 

Sekarang B - KEPALA. Karena Anda menggunakan --hard , file Anda kembali ke --hard saat Anda melakukan B.

Ah, tapi anggap saja komit C bukan bencana, tapi cukup sedikit. Anda ingin membatalkan komit, tetapi simpan perubahan Anda untuk edit kecil sebelum membuat komit terbaik. Mulai lagi di sini, dengan C sebagai kepala Anda:

  (F) ABC ↑ master 

Anda dapat melakukan ini dengan meninggalkan --hard :

border=0
 git reset HEAD~1 

Dalam hal ini, hasilnya adalah:

  (F) ABC ↑ master 

Dalam kedua kasus, KEPALA hanyalah penunjuk ke komit terakhir. Ketika Anda melakukan git reset HEAD~1 , Anda memberi tahu Git untuk memindahkan pointer HEAD kembali satu komit. Tetapi (kecuali jika Anda menggunakan --hard ) Anda membiarkan file Anda seperti --hard . Sekarang git status menunjukkan perubahan yang Anda daftarkan di C. Anda belum kehi>

Untuk sentuhan ringan, Anda bahkan dapat membatalkan komit, tetapi tinggalkan file dan indeks Anda :

 git reset --soft HEAD~1 

Ini tidak hanya meninggalkan file Anda sendiri, tetapi bahkan meninggalkan indeks Anda sendiri. Ketika Anda melakukan git status , Anda akan melihat bahwa indeks berisi file yang sama seperti sebelumnya. Bahkan, tepat setelah perintah ini, Anda dapat menjalankan git commit dan Anda akan mengu>

Satu hal lagi: misalkan Anda menghancurkan sebuah komit, seperti pada contoh pertama, tetapi kemudian Anda menemukan bahwa Anda membutuhkannya pada akhirnya ? Tidak beruntung, kan?

Tidak, masih ada cara untuk mendapatkannya kembali. Ketik git reflog , dan Anda akan melihat daftar (sebagian) komit ShAS (mis., Hash) yang Anda pindahkan untuk menemukan komit yang Anda hancurkan, dan lakukan itu::

 git checkout -b someNewBranchName shaYouDestroyed 

Anda sekarang telah menghidupkan kembali komit ini. Komite tidak benar-benar dihancurkan di Git selama sekitar 90 hari, jadi Anda biasanya dapat kembali dan menyimpannya yang tidak ingin Anda singkirkan.

10099
29 июля '11 в 1:22 2011-07-29 01:22 jawabannya diberikan oleh Ryan Lundy 29 Juli '11 di 1:22 2011-07-29 01:22

Butuh beberapa waktu untuk mengerti, jadi mungkin ini akan membantu seseorang ...

Ada dua cara untuk "membatalkan" komit terakhir Anda, tergantung pada apakah Anda membuat laporan publik (mengklik repositori jarak jauh):

Cara membatalkan komit lokal

Biarkan dikatakan bahwa saya membuatnya secara lokal, tetapi sekarang saya ingin menghapus fiksasi ini.

 git log commit 101: bad commit # latest commit, this would be called 'HEAD' commit 100: good commit # second to last commit, this is the one we want 

Untuk mengembalikan semuanya sebelum komit terakhir, kita perlu melakukan reset sebelum komit sebelum HEAD :

 git reset --soft HEAD^ # use --soft if you want to keep your changes git reset --hard HEAD^ # use --hard if you don't care about keeping the changes you made 

Sekarang git log akan menunjukkan bahwa komit terakhir kami telah dihapus.

Cara membatalkan perbaikan publik

Jika Anda telah membuat komit tersedia untuk umum, Anda harus membuat komit baru yang "mengembalikan" perubahan yang Anda buat pada komit sebelumnya (KEPALA saat ini).

 git revert HEAD 

Sekarang perubahan Anda akan dibatalkan dan siap untuk dilakukan:

 git commit -m 'restoring the file I removed by accident' git log commit 102: restoring the file I removed by accident commit 101: removing a file we don't need commit 100: adding a file that we need 

Untuk informasi lebih lanjut, lihat Dasar-Dasar Git - Batalkan Hal.

1889
16 июня '11 в 20:27 2011-06-16 20:27 jawabannya diberikan oleh Andrew pada 16 Juni '11 di 20:27 2011-06-16 20:27

Tambah / hapus file untuk mendapatkan yang Anda inginkan:

 git rm classdir git add sourcedir 

Kemudian ubah komit:

 git commit --amend 

Perbaikan yang salah dan sebelumnya akan diedit untuk mencerminkan keadaan indeks yang baru - dengan kata lain, sepertinya Anda tidak pernah melakukan kesalahan sejak awal.

Perhatikan bahwa Anda hanya harus melakukan ini jika Anda belum mengklik. Jika Anda mengklik, Anda hanya harus berkomitmen untuk memperbaikinya secara normal.

1664
29 мая '09 в 21:16 2009-05-29 21:16 jawabannya diberikan bdonlan 29 Mei '09 pada 21:16 2009-05-29 21:16
926
29 мая '09 в 21:13 2009-05-29 21:13 Lennart Koopmann menjawab pada 29 Mei 2009 pada 21:13 2009-05-29 21:13

Untuk mengubah komit terakhir

Ganti file dalam indeks:

 git rm --cached *.class git add *.java 

Kemudian, jika itu adalah cabang pribadi, ubah komit:

 git commit --amend 

Atau, jika ini adalah cabang bersama, lakukan komit baru:

 git commit -m 'Replace .class files with .java files' 


( untuk mengubah komit sebelumnya , gunakan rebase interaktif yang luar biasa)


ProTip ™: tambahkan *.class ke gitignore untuk menghentikan pengu>


Untuk mengembalikan perbaikan

Mengubah komit adalah solusi ideal jika Anda perlu mengubah komit terakhir, tetapi reset lebih umum.

Anda dapat mereset git ke fixture apa pun menggunakan:

 git reset @~N 

Di mana N adalah jumlah komit sebelum HEAD , dan @~ kembali ke komit sebelumnya.

Jadi, alih-alih membuat perubahan pada komit, Anda dapat menggunakan:

 git reset @~ git add *.java git commit -m "Add .java files" 

Periksa git help reset , khususnya, bagian --soft --mixed dan --hard untuk lebih memahami apa fungsinya.

Reflog

Jika Anda kacau, Anda selalu dapat menggunakan reflog untuk menemukan komit jarak jauh:

 $ git reset @~ $ git reflog c4f708b HEAD@{0}: reset: moving to @~ 2c52489 HEAD@{1}: commit: added some .class files $ git reset 2c52489 ... and you're back where you started 


707
31 июля '10 в 12:39 2010-07-31 12:39 jawabannya diberikan Zaz 31 Juli '10 pada 12:39 2010-07-31 12:39

Gunakan git revert <commit-id>

Untuk mendapatkan id perbaikan, cukup gunakan git log

589
25 мая '12 в 19:04 2012-05-25 19:04 jawabannya diberikan oleh Jaco Pretorius 25 Mei '12 pada 19:04 2012-05-25 19:04

Jika Anda berencana untuk membatalkan komit sepenuhnya, tidak peduli apa yang Anda ubah, Anda membuat komit, dan jika Anda tidak khawatir tentang itu, jalankan saja perintah berikut.

 git reset --hard HEAD^1 

(Perintah ini akan mengabaikan semua komitmen Anda, dan perubahan Anda akan sepenuhnya hi>git add ), jalankan perintah berikut.

 git reset --soft HEAD^1 

Sekarang file tetap Anda berada di area pementasan. Misalkan jika Anda ingin melebihi file, karena Anda perlu mengedit konten yang salah, jalankan perintah berikut

 git reset HEAD 

Sekarang file yang ditransfer datang dari area bertahap ke area tidak terkirim. Sekarang file siap untuk diedit, jadi apa pun yang Anda ubah, Anda ingin pergi untuk mengedit dan menambahkannya dan membuat komit baru / baru.

Lebih banyak

472
31 янв. jawabannya diberikan Madhan Ayyasamy 31 Januari 2013-01-31 10:06 '13 pada 10:06 2013-01-31 10:06

Jika Anda menginstal Git Extras , Anda dapat menjalankan git undo untuk membatalkan komit terakhir. git undo 3 membatalkan 3 commit terakhir.

451
13 дек. jawabannya diberikan nick 13 Des 2011-12-13 13:18 '11 pada 13:18 2011-12-13 13:18

Saya ingin membatalkan 5 komitmen terakhir di repositori bersama kami. Saya melihat id revisi yang ingin saya putar kembali. Lalu saya mengetik berikut ini.

 prompt> git reset --hard 5a7404742c85 HEAD is now at 5a74047 Added one more page to catalogue prompt> git push origin master --force Total 0 (delta 0), reused 0 (delta 0) remote: bb/acl: neoneye is allowed. accepted payload. To git@bitbucket.org:thecompany/prometheus.git + 09a6480...5a74047 master -> master (forced update) prompt> 
419
06 апр. jawabannya diberikan neoneye 06 April. 2012-04-06 16:58 '12 pada 16:58 2012-04-06 16:58

Saya lebih suka menggunakan git rebase -i untuk tugas ini, karena ada daftar yang bagus di mana saya bisa memilih komit untuk dihi>

Pilih jumlah komit yang ingin Anda daftarkan, lalu panggil (untuk mengambil tiga terakhir)

 git rebase -i HEAD~3 

Daftar sampel

 pick aa28ba7 Sanity check for RtmpSrv port pick c26c541 RtmpSrv version option pick 58d6909 Better URL decoding support 

Git kemudian akan menghapus komit untuk setiap baris yang akan dihapus.

397
25 окт. Balas diberikan oleh Steven Penny pada 25 Okt 2012-10-25 06:41 '12 pada 6:41 pagi 2012-10-25 06:41

Cara memperbaiki komit lokal sebelumnya

Gunakan git-gui (atau yang setara) untuk melakukan git commit --amend . Dari GUI, Anda dapat menambah atau menghapus file individual dari komit. Anda juga dapat mengubah pesan komit.

Cara membatalkan komit lokal sebelumnya

Cukup kembalikan cabang Anda ke lokasi sebelumnya (misalnya, menggunakan gitk atau git rebase ). Kemudian gunakan kembali perubahan dari salinan yang disimpan. Setelah pengumpulan sampah di penyimpanan lokal Anda akan seperti fakta bahwa komit yang tidak diinginkan tidak pernah terjadi. Untuk melakukan semua ini dalam satu perintah, gunakan git reset HEAD~1 .

Sebuah kata peringatan : penggunaan git reset ceroboh adalah cara yang baik untuk membingungkan copy pekerjaan Anda. Saya merekomendasikan pemula Git untuk menghindari ini jika mereka bisa.

Cara membatalkan komitmen publik

Membalikkan cherry pilih ( git-revert ) untuk membuang perubahan.

Jika Anda belum membuat perubahan lain pada utas Anda, Anda dapat ...

 git revert --no-edit HEAD 

Kemudian kirim cabang yang diperbarui ke repositori umum.

Riwayat komit akan menampilkan kedua komit secara terpisah.


Opsional: perbaiki cabang pribadi di repositori publik

Ini bisa berbahaya - pastikan Anda memiliki salinan cabang setempat.

Perhatikan juga: Anda tidak ingin melakukan ini jika ada orang lain yang bekerja di cabang.

 git push --delete (branch_name) ## remove public version of branch 

Bersihkan cabang Anda secara lokal, lalu tekan ...

 git push origin (branch_name) 

Dalam kasus normal, Anda mungkin tidak perlu khawatir bahwa riwayat komit Anda di cabang pribadi tidak akan tersentuh. Tekan saja komit berikutnya (lihat "Cara membatalkan komit publik" di atas), dan kemudian lakukan penggabungan squash untuk menyembunyikan cerita.

382
23 апр. jawabannya diberikan nobar 23 Apr 2013-04-23 20:27 '13 pada 20:27 2013-04-23 20:27

Jika Anda melakukan kesalahan, tetapi tidak mengklik,

 git reset --soft HEAD~1 

KEPALA ~ 1 adalah kependekan dari pemasangan di depan kepala. Atau, Anda bisa merujuk ke hash SHA-1 jika Anda ingin mengatur u>

Jika Anda ingin menyingkirkan perubahan pada file yang dipantau di pohon yang berfungsi, sebagai fiksasi sebelum suara menggunakan " --hard ".

Atau

Jika Anda sudah mengklik dan seseorang menarik, yang biasanya adalah bisnis saya, Anda tidak dapat menggunakan git reset. Namun, Anda dapat melakukan git revert,

 git revert HEAD 

Ini akan membuat perbaikan baru, yang membatalkan semua yang dimasukkan oleh perbaikan acak.

307
03 сент. jawabannya diberikan santos_mgr 03 sep . 2014-09-03 10:15 '14 jam 10:15 2014-09-03 10:15

Jika Anda ingin membatalkannya secara permanen, dan Anda telah mengkloning beberapa repositori

ID perbaikan dapat dilihat.

 git log 

Maka Anda bisa melakukan -

 git reset --hard <commit_id> git push origin <branch_name> -f 
303
17 мая '13 в 16:02 2013-05-17 16:02 jawabannya diberikan oleh poorva pada 17 Mei '13 pukul 4:02 2013-05-17 16:02

Di SourceTree (GUI untuk GitHub), Anda dapat mengklik kanan komit dan menjalankan Reverse Fix. Ini harus membatalkan perubahan Anda.

Di terminal:

Anda juga dapat menggunakan:

 git revert 

Atau:

256
28 июня '13 в 13:18 2013-06-28 13:18 jawabannya diberikan oleh Varun Parakh pada 28 Juni '13 pada 13:18 2013-06-28 13:18

Tim tunggal:

241
05 марта '14 в 16:55 2014-03-05 16:55 jawabannya diberikan oleh Manish Shrivastava pada 05 Maret '14 pada 16:55 2014-03-05 16:55

Setel u>git :

 git reset --soft HEAD~1 

Jelaskan bahwa apa yang dilakukan git reset pada dasarnya adalah reset ke --soft yang ingin Anda kembalikan, maka jika Anda menggabungkannya dengan --soft , itu akan kembali, tetapi simpan perubahan pada file Anda, sehingga Anda akan kembali ke adegan di mana file telah ditambahkan, HEAD adalah kepala cabang, dan jika Anda bergabung dengan ~1 (dalam hal ini, Anda juga menggunakan HEAD^ ), itu akan kembali ke hanya satu perintah yang Anda inginkan ...

Saya membuat >

2019

Bagaimana cara membatalkan git terakhir?

Untuk mengembalikan semuanya sebelum komit terakhir, kita perlu mengatur u>

  1. Jika Anda tidak ingin menyimpan perubahan yang Anda buat:

     git reset --hard HEAD^ 
  2. Jika Anda ingin menyimpan perubahan Anda:

     git reset --soft HEAD^ 

Sekarang periksa git log Anda. Ini akan menunjukkan bahwa perbaikan terakhir kami telah dihapus.

214
23 апр. jawabannya diberikan kepada Ranjithkumar Ravi pada 23 April 2014-04-23 14:21 '14 pada 14:21 2014-04-23 14:21

Gunakan reflog untuk menemukan kondisi yang benar.

 git reflog 

2019

172
07 янв. balasan yang diberikan oleh Shubham Chaudhary 07 Jan 2014-01-07 01:34 '14 pada 1:34 2014-01-07 01:34

"Setel u>

 git reset --hard HEAD^ 

"Hapus file yang tidak dikenal dari pohon yang bekerja"

 git clean 

lihat - Dapatkan referensi cepat

CATATAN Perintah ini akan menghapus komit sebelumnya, jadi gunakan dengan hati-hati! git reset --hard lebih aman -

167
03 окт. balasan diberikan Ravi_Parmar 03 Okt. 2013-10-03 15:43 '13 pada 15:43 2013-10-03 15:43

Jalankan pertama:

 git reflog 

Ini akan menunjukkan kepada Anda semua tindakan yang mungkin Anda lakukan di repositori Anda, misalnya, melakukan, menggabungkan, menarik, dll.

Kemudian lakukan:

 git reset --hard ActionIdFromRefLog 
150
11 окт. jawabannya diberikan oleh U. Ali pada 11 Oktober. 2013-10-11 17:41 '13 pada 17:41 2013-10-11 17:41

Batalkan komit terakhir:

git reset --soft HEAD^ atau git reset --soft HEAD~

Ini akan membatalkan komit terakhir.

Di sini --soft berarti pengaturan u>

HEAD~ atau HEAD^ berarti komit sebelum KEPALA.


Ganti komit terakhir dengan yang baru:

 git commit --amend -m "message" 

Ini akan menggantikan komit terakhir dengan fixer baru.

141
06 марта '16 в 14:53 2016-03-06 14:53 jawabannya diberikan akshay_rahar 06 Maret 16 di 14:53 2016-03-06 14:53

Cara lain:

Buat permintaan untuk cabang yang ingin Anda kembalikan, lalu kembalikan copy pekerjaan lokal ke komit yang Anda inginkan sebagai yang terakhir di server jarak jauh (semua setelah itu tinggal bye). Untuk melakukan ini, saya mengklik kanan pada SourceTree dan memilih "Reset BRANCHNAME ke komit ini".

Lalu pergi ke direktori repositori lokal dan jalankan perintah berikut:

 git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME 

Ini akan menghapus semua komit setelah yang sekarang ada di repositori lokal, tetapi hanya untuk satu cabang.

136
13 мая '13 в 20:12 2013-05-13 20:12 jawabannya diberikan CommaToast 13 Mei, '13 pukul 8:12 malam 2013-05-13 20:12

Masukkan git log dan temukan kode hash terbaru dan masukkan:

 git reset <the previous co> 
127
15 мая '13 в 16:12 2013-05-15 16:12 jawabannya diberikan oleh user853293 15 Mei '13 pada 16:12 2013-05-15 16:12

Dalam kasus saya, saya secara tidak sengaja membuat beberapa file yang tidak saya inginkan. Jadi saya melakukan yang berikut, dan berhasil:

 git reset --soft HEAD^ git rm --cached [files you do not need] git add [files you need] git commit -c ORIG_HEAD 

Periksa hasil dengan gitk atau git log --stat

124
18 июля '13 в 9:41 2013-07-18 09:41 jawabannya diberikan oleh egridasov 18 Juli '13 pada 9:41 2013-07-18 09:41

Gunakan SourceTree (alat grafis untuk Git) untuk melihat komit dan pohon Anda. Anda dapat mengatur u>

113
29 авг. Jawabannya diberikan iOS Coder 29 Agustus. 2013-08-29 19:18 '13 pada 19:18 2013-08-29 19:18

Untuk kembali ke revisi sebelumnya, hapus semua perubahan yang tidak dikomit secara permanen:

 git reset --hard HEAD~1 
111
28 авг. jawabannya diberikan oleh thestar 28 Agustus. 2014-08-28 19:03 '14 pada 19:03 2014-08-28 19:03

Ada dua skenario utama.

Anda belum menekan komit

Jika masalah terkait dengan file tambahan yang telah Anda komit (dan Anda tidak ingin menggunakannya dalam repositori), Anda dapat menghapusnya dengan git rm dan kemudian --amend with --amend

 git rm <pathToFile> 

Anda juga dapat menghapus seluruh direktori dengan -r atau bahkan digabung dengan perintah bash lainnya.

 git rm -r <pathToDirectory> git rm $(find -name '*.class') 

Setelah menghapus file, Anda dapat mengkomit menggunakan opsi --amend

 git commit --amend -C HEAD # the -C option is to use the same commit message