Rollback untuk melakukan git terakhir

120

Saya baru saja melakukan

git commit -m "blah"

lalu saya menambahkan beberapa file, bagaimana cara mengembalikan dan menghapus apa yang ada di file saya saat ini yang belum ditambahkan / dilakukan?

Blankman
sumber
15
tidak, ini bukan yang diminta OP - jelas bahwa dia ingin melakukan rollback ke commit terakhir, bukan membatalkan commit terakhir. dia tidak mengatakan dia menambahkan beberapa file dan kemudian mengikatnya. begitu jelas dia menginginkan komit terakhir.
Paul
1
Terlalu sulit untuk menemukan jawaban atas pertanyaan yang sangat umum ini
Sam

Jawaban:

211

Caveat Emptor - Perintah yang merusak di depan.

Mitigasi - git reflog dapat menyelamatkan Anda jika Anda membutuhkannya.


1) URUNGKAN perubahan file lokal dan TETAP komit terakhir Anda

git reset --hard

2) URUNGKAN perubahan file lokal dan HAPUS pengubahan terakhir Anda

git reset --hard HEAD^

3) TETAP perubahan file lokal dan HAPUS komit terakhir Anda

git reset --soft HEAD^
Joe Hanink
sumber
20
Perintah ini akan menghapus komit Anda sebelumnya, jadi gunakan dengan hati-hati! git reset --hard lebih aman
rudivonstaden
9
WTF melakukan ini sebagai jawaban yang benar dengan 36 suara terbanyak. Saya baru saja kehilangan satu hari kerja untuk ini ... karena saya membaca jawabannya bukan komentar. Ini bukan jawaban yang benar untuk pertanyaan itu!
Chris Nevill
1
OK semua tidak hilang! Anda dapat melakukan git reflog ini akan memungkinkan Anda melihat komit yang Anda lakukan sebelum reset. Anda kemudian dapat membayar komitmen tersebut
Chris Nevill
3
Untuk apa nilainya, saya telah menafsirkan pertanyaan OP sebagai "bagaimana cara mengembalikan komit dan menghapus file saat ini", tetapi itu dan tetap ambigu. Saya akan memahami secara berbeda jika OP hanya mengatakan "bagaimana cara menghapus file saat ini yang belum ditambahkan atau dilakukan"
Joe Hanink
2
Git adalah antitesis dari pernyataan Alan Kays Hal-hal sederhana harus sederhana, hal-hal kompleks harus dimungkinkan. ... terutama bagian pertamanya. Tetap saja, terima kasih atas jawaban Anda. itu membantu.
0xC0000022L
46

Jika Anda ingin menghapus konten dan file yang baru ditambahkan yang sudah bertahap (ditambahkan ke indeks), maka Anda menggunakan:

git reset --hard

Jika Anda juga ingin menghapus komit terakhir Anda (adalah yang memiliki pesan "bla") maka lebih baik menggunakan:

git reset --hard HEAD^

Untuk menghapus file yang tidak terlacak (jadi file baru belum ditambahkan ke indeks) dan folder gunakan:

git clean --force -d
Paul Pladijs
sumber
apakah git reset --hard HEAD ^ menghapus komit terbaru saya secara permanen? seperti saya tidak bisa kembali ke sana?
pengguna137717
tampaknya "git clean --force -d" juga menghapus folder .gitignored
Alexey Timokhin
15

git reset --hard akan memaksa direktori kerja kembali ke komit terakhir dan menghapus file baru / yang diubah.

SpliFF
sumber
2
melakukan itu, tapi filenya masih ada. (file yang tidak terlacak masih ada)
Blankman
dalam hal ini Anda bisa melakukan "git stash"
jacktrade
3
dipilih karena ini adalah satu-satunya jawaban yang jelas dan tidak ambigu untuk pertanyaan OP yang jelas dan tidak ambigu.
Paul
4

Anda dapat mengembalikan komit menggunakan git revert HEAD^untuk mengembalikan ke komit berikutnya-ke-terakhir. Anda juga dapat menentukan komit untuk mengembalikan menggunakan id sebagai ganti HEAD ^

Sebastian Oliva
sumber
Ini tidak "kembali" dalam arti yang Anda katakan. Ini menciptakan komit terbalik.
Stefan Kendall
4

Jika Anda hanya ingin membatalkan komit terakhir, gunakan ini:

git reset HEAD~

bekerja seperti pesona bagi saya.

Abhishek saharn
sumber
2
ini adalah jawaban yang tepat untuk pertanyaan
Deniz Kocaboğa
ini harus menjadi jawaban yang disetujui
ramah
3

Cara mudah dan sangat mudah untuk MENGURANGI perubahan file lokal sejak komit terakhir adalah dengan menempatkannya di cabang baru:

git branch changes
git checkout changes
git add .
git commit

Ini meninggalkan perubahan di cabang baru. Kembali ke cabang asli untuk menemukannya kembali ke komit terakhir:

git checkout master

Cabang baru adalah tempat yang baik untuk mempraktikkan berbagai cara untuk mengembalikan perubahan tanpa risiko mengacaukan cabang asli.

Terje Norderhaug
sumber