Apakah ada perintah git untuk mengembalikan semua perubahan yang tidak dikomit di pohon dan indeks yang berfungsi dan juga menghapus file dan folder yang baru dibuat?
Apakah ada perintah git untuk mengembalikan semua perubahan yang tidak dikomit di pohon dan indeks yang berfungsi dan juga menghapus file dan folder yang baru dibuat?
Jawaban:
Anda dapat menjalankan dua perintah ini:
# Revert changes to modified files.
git reset --hard
# Remove all untracked files and directories.
# '-f' is force, '-d' is remove directories.
git clean -fd
git clean -i
untuk mode interaktif.
git merge --abort
.
Jika Anda ingin mengembalikan perubahan hanya di direktori kerja saat ini, gunakan
git checkout -- .
Dan sebelum itu, Anda dapat membuat daftar file yang akan dikembalikan tanpa benar-benar melakukan tindakan apa pun, hanya untuk memeriksa apa yang akan terjadi, dengan:
git checkout --
git reset --hard
?
Gunakan "git checkout - ..." untuk membuang perubahan pada direktori yang berfungsi
git checkout -- app/views/posts/index.html.erb
atau
git checkout -- *
menghapus semua perubahan yang dibuat untuk file yang tidak dipentaskan dalam status git misalnya
modified: app/controllers/posts.rb
modified: app/views/posts/index.html.erb
git checkout -- *
tidak berfungsi untuk saya kecuali saya berada di direktori tempat file yang diubah berada. Untuk checkout semua file di seluruh repositori, Anda harus melakukannyagit checkout -- :/
git checkout -- *
, bintang digantikan oleh Shell, dengan semua file dan direktori di direktori saat ini. Jadi harus masuk dalam subdirektori. Ini bekerja untuk saya. Tapi terima kasih untuk menyoroti sintaks ": /" yang menurut saya lebih bersih.
Salah satu cara non-sepele adalah menjalankan dua perintah ini:
git stash
Ini akan memindahkan perubahan Anda ke simpanan, membawa Anda kembali ke status KEPALAgit stash drop
Ini akan menghapus simpanan terbaru yang dibuat dalam perintah terakhir.fatal: git-write-tree: error building trees Cannot save the current index state
git clean -fd
tidak membantu, file baru tetap ada. Apa yang saya lakukan adalah benar-benar menghapus semua pohon yang bekerja dan kemudian
git reset --hard
Lihat " Bagaimana cara menghapus direktori kerja lokal saya di git? " Untuk saran untuk menambahkan -x
opsi untuk membersihkan:
git clean -fdx
Catatan -x
bendera akan menghapus semua file diabaikan oleh Git jadi hati-hati (lihat diskusi dalam jawaban saya lihat).
Saya pikir Anda dapat menggunakan perintah berikut: git reset --hard
Harap dicatat bahwa mungkin masih ada file yang tampaknya tidak akan hilang - mereka mungkin belum diedit, tetapi git mungkin telah menandai mereka sebagai sedang diedit karena perubahan CRLF / LF. Lihat apakah Anda telah membuat beberapa perubahan .gitattributes
baru-baru ini.
Dalam kasus saya, saya telah menambahkan pengaturan CRLF ke .gitattributes
file dan semua file tetap dalam daftar "file yang dimodifikasi" karena ini. Mengubah pengaturan .gitattributes membuatnya menghilang.
Jika Anda memiliki perubahan yang tidak dikomit (hanya di copy pekerjaan Anda) yang ingin Anda kembalikan ke salinan di komit terbaru Anda, lakukan hal berikut:
git checkout filename
git rm filename
, dan tidak berfungsi. error: pathspec 'filename' did not match any file(s) known to git.
git rm
adalahgit checkout master -- filename
Git 2.23 memperkenalkan git restore
perintah untuk mengembalikan file pohon yang berfungsi.
https://git-scm.com/docs/git-restore
Untuk mengembalikan semua file di direktori saat ini
git restore.
Jika Anda ingin mengembalikan semua file sumber C agar sesuai dengan versi dalam indeks, Anda bisa melakukannya
git restore '* .c'
Anda bisa menggunakan perintah git berikut yang dapat mengembalikan kembali semua perubahan yang tidak dikomit yang dibuat dalam repositori Anda:
git checkout .
Contoh:
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: application/controllers/Drivers.php
modified: application/views/drivers/add.php
modified: application/views/drivers/load_driver_info.php
modified: uploads/drivers/drivers.xlsx
no changes added to commit (use "git add" and/or "git commit -a")
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git checkout .
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
Saya biasanya menggunakan cara ini yang bekerja dengan baik:
mv fold/file /tmp
git checkout fold/file
Jalan yang aman dan jauh:
git branch todelete
git checkout todelete
git add .
git commit -m "I did a bad thing, sorry"
git checkout develop
git branch -D todelete