git reset - HEAD HEAD meninggalkan file tidak terlacak

584

Ketika saya menjalankan git reset --hard HEAD, itu seharusnya direset ke versi asli dari apa yang Anda tarik, seperti yang saya mengerti. Sayangnya, ia meninggalkan file-file yang tergeletak di sekitarnya, karena git statusmenunjukkan daftar besar file yang tidak terlacak.

Bagaimana Anda memberi tahu git, "Kembalikan saja ke PERSIS apa yang ada di tarikan terakhir, tidak lebih, tidak kurang"?

Karl
sumber
44
git reset --hardmengatur ulang indeks Anda dan mengembalikan file yang dilacak kembali ke keadaan saat mereka berada di HEAD. Itu meninggalkan file yang tidak terlacak sendirian.
fifigyuri

Jawaban:

904

Anda harus menggunakan git clean -f -duntuk menyingkirkan file dan direktori yang tidak terlacak dalam copy pekerjaan Anda.

Jika Anda perlu mengatur ulang seluruh repositori untuk dikuasai termasuk semua submit git, jalankan skrip ini:

git reset --hard HEAD
git clean -f -d
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule update
git submodule update --init --recursive
git submodule foreach git reset --hard HEAD
git submodule foreach git clean -f -d
git submodule foreach git submodule update --init --recursive
git submodule foreach git fetch
git submodule foreach git pull
git status
rajutan
sumber
56
Juga -xjika Anda ingin menghapus file .gitignored Anda dan kembali ke keadaan murni.
jtdubs
44
Tambahkan -nke tes akan dihapus dulu. menggabungkan semuanya dalam satu argumen:-dfn
HyBRiD
31
Perintah bersama saya ada di git clean -qfdxsini. Hapus semuanya dan lakukan dengan diam-diam.
aragaer
3
-d -fdapat di-dekor dua kali -dffuntuk -d -f -f, ini akan menghapus SEMUA direktori yang tidak terlacak, termasuk direktori yang tidak terlacak yang dilindungi.
ThorSummoner
3
@ BKSpurgeon: ya, menghapus file. Apa maksud Anda dengan »Saya ingin file yang tidak terlacak seperti sebelumnya«? Git tidak tahu apa-apa tentang file yang tidak dilacak, kecuali bahwa mereka ada. Itu tidak melacak beberapa versi dari file-file ini (karena mereka tidak terlacak ).
Knittl
61

Jika Anda memiliki file Anda masih ingin menyimpan:

git clean -di akan melakukan pembersihan interaktif yang memungkinkan Anda hanya menghapus file / direktori yang tidak Anda inginkan lagi.

Sogger
sumber
48
git reset --hard && git clean -dfx

atau, zsh memberikan alias 'gpristine':

alias gpristine='git reset --hard && git clean -dfx'

Yang sangat berguna.

Jika mengerjakan repo bercabang dua, pastikan untuk mengambil dan mengatur ulang dari repo / cabang yang benar, misalnya:

git fetch upstream && git reset --hard upstream/master && git clean -df
Jovis
sumber
8
Permintaan maaf jika ini bukan perintah yang aman - Saya tidak berusaha untuk aman, saya mencoba menjawab pertanyaan. Bisakah Anda mengomentari apakah ini menjawab pertanyaan?
jjnevis
3
Ini berfungsi dengan baik dan harus dibangun ke git IMHO (walaupun saya tidak yakin saya akan menggunakan -x secara rutin). Berkali-kali saya mengerjakan proyek lokal, belum disinkronkan ke github dll, dan sebuah refactor berantakan menjadi berantakan melampaui keadaan 'undo' IDE. Naluri saya adalah kembali ke komit terakhir tetapi googling untuk itu biasanya mengambil jawaban untuk komit terakhir, bukan komit terakhir. Yang ingin saya lakukan adalah kembali ke komit terbaru. Ini melakukan itu. Seharusnya cara yang lebih mudah. Linus terima kasih! ;-)
Dell Anderson
5
Ini berbahaya karena itu juga menghapus file yang diabaikan dengan -xsuka jika Anda baru saja mengkloning repo. Jika itu yang Anda inginkan, itu sempurna. Jika Anda hanya ingin menghapus file yang tidak dilacak , menghapus -xopsi berfungsi dengan baik.
Emile Bergeron
2
Terima kasih Tuhan untukgpristine
Snowcrash
2
dan menghapus pengaturan intellij;)
Kalpesh Soni
17

Pendekatan interaktif pengguna:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y

-i untuk interaktif
-f untuk memaksa
-d untuk direktori
-x untuk file yang diabaikan (tambahkan jika diperlukan)

Catatan: Tambahkan -n atau --dry-jalankan untuk hanya memeriksa apa yang akan dilakukan.

bit_cracker007
sumber
4

Anda bisa menggunakannya git stash. Anda harus menentukan --include-untracked, jika tidak, Anda akan berakhir dengan masalah asli.

git stash --include-untracked

Kemudian cukup masukkan entri terakhir di simpanan

git stash drop

Anda dapat membuat alias berguna-keren untuk itu, dan menyebutnya git wipesebagai contoh:

git config --global alias.wipe "! git stash -q --include-untracked && git stash drop -q"
Nikola Diklic
sumber
2

Perintah yang Anda cari adalah git clean

Jagriti Kumari
sumber
4
Lain kali tolong tambahkan sedikit deskripsi / contoh dll. Apa pun yang membantu pengguna untuk memahami apa yang dilakukannya, dan, dalam hal ini, parameter apa yang digunakan.
rugk
1

git-clean Gunakan untuk menghapus file yang tidak dilacak di pohon kerja. Berikut ini adalah beberapa opsi (secara singkat) yang dapat digunakan dengan git cleanperintah.

-dgunakan saat tidak ada jalur yang ditentukan. Jadi git berulang ke direktori yang tidak dilacak untuk menghapusnya.

-f/--force Untuk menghapus file yang tidak terlacak bersarang.

-i/--interactive Tunjukkan apa yang akan dilakukan dan bersihkan file secara interaktif.

-n/--dry-run Tunjukkan apa yang akan terjadi tanpa menghapus apa pun.

-x abaikan file

contoh: git clean -f -d-> Hapus semua file yang tidak terlacak dalam direktori saat ini, setiap subdirektori.

Yuresh Karunanayake
sumber
-16

Anda mungkin telah melakukan soft reset di beberapa titik, Anda dapat menyelesaikan masalah ini dengan melakukan

git add .
git reset --hard HEAD~100
git pull
pengguna3780587
sumber
7
Saya tidak berpikir ini yang diinginkan OP. Salah satu dari jawaban lain melakukan pekerjaan yang jauh lebih baik untuk benar-benar menunjukkan cara memperbaikinya.
Avery
1
Ini juga bisa lambat jika Anda memiliki banyak file untuk ditambahkan.
Devin G Rhode
4
sama sekali tidak berhubungan.
Azeem Hassni
1
Melakukan ini, file yang tidak dilacak akan dihapus. Tetapi sebagai programmer, setiap orang harus mencoba menemukan solusi yang tepat untuk masalah tanpa menggunakan solusi dan senyum.
Yuresh Karunanayake