Setel ulang semua perubahan setelah komit terakhir di git

324

Bagaimana saya bisa membatalkan setiap perubahan yang dilakukan pada direktori saya setelah komit terakhir, termasuk menghapus file yang ditambahkan, mengatur ulang file yang dimodifikasi, dan menambahkan kembali file yang dihapus?

Dogbert
sumber
kemungkinan rangkap dari Kembalikan ke komitmen Git sebelumnya
nawfal
8
@nawfal mungkin merupakan duplikat, tetapi 'setel ulang semua perubahan setelah komit terakhir' cocok dengan kriteria pencarian yang lebih banyak (kata-kata yang dicari di google) daripada 'cara mengembalikan repositori git' yang sesuai. Setidaknya untuk orang-orang seperti saya yang tidak memiliki bahasa Inggris sebagai bahasa ibu mereka: d
Shirish Herwade

Jawaban:

561

Atur ulang perubahan terlebih dahulu

git reset HEAD --hard

lalu bersihkan semua yang tidak terlacak. Jika Anda ingin menyimpan file yang tidak dapat dilacak .gitignore, berhati-hatilah dengan perintah ini.

git clean -fd
Benjamin Bannier
sumber
7
@ Adam: Kadang-kadang Anda mungkin menginginkan -xopsi itu git cleanjuga, yang mengarahkannya untuk menghapus file yang diabaikan juga.
Cascabel
31
Jika Anda ingin menyimpan file yang tidak dilacak karena .gitignore, berhati-hatilah dengan git clean -fdperintah.
bitsoflogic
3
@Levinaris: Ini sebaliknya git clean -fdtidak akan menghapus file yang diabaikan. -xakan.
Robert Siemer
5
@RobertSiemer Sebenarnya, itu bisa! Jika Anda memiliki folder yang seluruhnya terdiri dari file yang diabaikan itu akan menghapus folder itu sehingga menghapus file yang diabaikan. Pertimbangkan file .gitignore seperti di sini: stackoverflow.com/q/25554504/456645 . Dalam contoh ini, anggap beberapa folder tidak memiliki file PHP. git clean -fdakan menghapus folder itu dan file yang tidak terlacak. Diuji dengan git versi 1.9.1
bitsoflogic
3
tetapi mengapa 'pembersihan' kedua dibutuhkan sama sekali?
Shirish Herwade
71

Bagaimana saya bisa membatalkan setiap perubahan yang dilakukan pada direktori saya setelah komit terakhir, termasuk menghapus file yang ditambahkan, mengatur ulang file yang dimodifikasi, dan menambahkan kembali file yang dihapus?

  1. Anda dapat membatalkan perubahan pada file yang dilacak dengan:

    git reset HEAD --hard
    
  2. Anda dapat menghapus file yang tidak dilacak dengan:

    git clean -f
    
  3. Anda dapat menghapus file dan direktori yang tidak dilacak dengan:

    git clean -fd
    

    tetapi Anda tidak dapat membatalkan perubahan ke file yang tidak dilacak .

  4. Anda dapat menghapus file dan direktori yang diabaikan dan tidak terlacak

    git clean -fdx
    

    tetapi Anda tidak dapat membatalkan perubahan ke file yang diabaikan .

Anda juga dapat mengatur clean.requireForceke false:

git config --global --add clean.requireForce false

untuk menghindari penggunaan -f( --force) saat Anda menggunakan git clean.

Ortomala Lokni
sumber
2
Luar biasa, hanya apa yang saya butuhkan. Terima kasih atas perbandingan semua perintah yang relevan!
Marquee
-1

Ada dua perintah yang akan berfungsi dalam situasi ini,

root> git reset --hard HEAD ~ 1

root> git push -f

Untuk lebih banyak perintah git lihat halaman ini

RKS
sumber
1
git push -ftidak terkait dengan pertanyaan dan, dalam skenario ini, berbahaya
mustache1up