Bagaimana cara menolak perubahan yang tidak ditentukan dalam Git?

Bagaimana cara membatalkan perubahan dalam copy pekerjaan saya yang tidak tercantum dalam indeks?

3956
09 сент. Set hanya baca 09 Sep. 2008-09-09 22:33 '08 pada 10:33 2008-09-09 22:33
@ 32 jawaban
  • 1
  • 2

Cara cepat lain:

 git stash save --keep-index --include-untracked 

Anda tidak perlu menyertakan --include-untracked jika Anda tidak ingin --include-untracked .

Setelah itu Anda dapat mereset perangko ini dengan perintah git stash drop jika Anda mau.

2225
09 сент. balasan yang diberikan oleh Greg Hewgill 09 Sep 2008-09-09 22:39 '08 pada 10:39 2008-09-09 22:39

Untuk semua file yang tidak diinstal, gunakan:

 git checkout -- . 

Untuk penggunaan file tertentu:

border=0
 git checkout path/to/file/to/revert 

Pastikan untuk menentukan periode di akhir.

4303
09 сент. Jawabannya diberikan Tobi 09 Sep. 2008-09-09 22:37 '08 pada 10:37 2008-09-09 22:37

Tampaknya solusi lengkap:

 git clean -df git checkout -- . 

git clean menghapus semua file yang tidak diproses ( peringatan ), sementara itu tidak menghapus file yang diabaikan yang disebutkan secara >ia dapat menghapus file yang diabaikan dalam folder ), dan git checkout menghapus semua perubahan yang tidak ditentukan.

1643
29 авг. balasan yang diberikan oleh Mariusz Nowak 29 Agustus 2012-08-29 21:28 '12 pada 21:28 2012-08-29 21:28

Ini memeriksa indeks saat ini untuk direktori saat ini, membuang semua perubahan dalam file dari direktori saat ini ke bawah.

 git checkout . 

atau ini, yang memeriksa semua file dari indeks, menimpa file yang berfungsi dari pohon.

 git checkout-index -a -f 
283
20 июня '09 в 13:28 2009-06-20 13:28 jawabannya diberikan oleh CB Bailey pada 20 Juni 2009 pada 13:28 2009-06-20 13:28
 git clean -df 

Bersihkan pohon yang bekerja dengan menghapus file secara rekursif yang tidak di bawah kontrol versi, dimulai dengan direktori saat ini.

-d : hapus direktori yang tidak perlu selain file tanpa jejak

-f : Force (mungkin tidak diperlukan tergantung pada pengaturan clean.requireForce )

Jalankan git help clean untuk melihat tutorial.

218
07 дек. Balas diberikan oleh Elvis Ciotti 07 Des 2011-12-07 16:09 '11 pada 16:09 2011-12-07 16:09

Favorit saya

 git checkout -p 

Ini memungkinkan Anda mengembalikan potongan secara selektif.

Lihat juga:

 git add -p 
85
10 окт. balas yang diberikan Ben 10 Oktober 2014-10-10 15:31 '14 pada 15:31 2014-10-10 15:31

Karena tidak ada jawaban yang menawarkan varian kombinasi yang tepat yang saya gunakan, ini dia:

 git clean -dfx git checkout . 

Ini adalah teks bantuan online untuk opsi git clean digunakan:

-d

Hapus direktori yang tidak perlu selain file mentah. Jika direktori yang tidak ditandatangani dikelola oleh repositori Git lain, itu tidak dihapus secara default. Gunakan opsi -f dua kali jika Anda benar-benar ingin menghapus direktori seperti itu.

-f

Jika variabel konfigurasi Git clean.requireForce tidak disetel ke false , Git clean akan menolak untuk menghapus file atau direktori kecuali -f , -n atau -i ditentukan. Git akan menolak untuk menghapus direktori dalam subdirektori atau file .git jika tidak -f kedua -f .

-x

Jangan gunakan aturan abaikan dari .gitignore (untuk setiap direktori) dan $GIT_DIR/info/exclude , tetapi tetap gunakan aturan abaikan yang ditentukan dengan opsi -e . Ini memungkinkan Anda untuk menghapus semua file yang tidak diproses, termasuk perakitan produk. Ini dapat digunakan (mungkin bersamaan dengan git reset ) untuk membuat direktori kerja yang tidak tersentuh untuk memeriksa bangunan yang bersih.

Selain itu, git checkout. harus dijalankan di root repo.

68
28 апр. Balas diberikan oleh Martin G 28 Apr. 2016-04-28 22:46 '16 pada 10:46 2016-04-28 22:46

Saya benar-benar menemukan artikel ini berguna untuk menjelaskan kapan harus menggunakan perintah yang mana: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

Ada beberapa kasus berbeda:

  • Jika Anda tidak meletakkan file, gunakan git checkout . Checkout "memperbarui file di pohon kerja sesuai dengan versi dalam indeks". Jika file tidak dikirim (juga ditambahkan ke indeks) ... perintah ini pada dasarnya akan mengembalikan file ke perbaikan terakhir Anda.

    git checkout -- foo.txt

  • Jika Anda meletakkan file, gunakan git reset. Atur u>

    git reset -- foo.txt

Saya menduga bahwa menggunakan git stash adalah pilihan yang populer, karena agak kurang berbahaya. Anda selalu dapat kembali ke sana jika Anda secara tidak sengaja menghapus terlalu banyak saat menggunakan git reset. Atur u>

Lihatlah artikel di atas untuk tips lebih lanjut.

53
14 авг. jawabannya diberikan blak3r 14 Agustus. 2012-08-14 00:31 '12 pada 0:31 2012-08-14 00:31

Cara termudah untuk melakukan ini adalah dengan menggunakan perintah ini:

Perintah ini digunakan untuk membatalkan perubahan di direktori kerja -

 git checkout -- . 

https://git-scm.com/docs/git-checkout

Pada perintah git, menempel file mentah dicapai menggunakan:

 git stash -u 

http://git-scm.com/docs/git-stash

45
12 апр. Balas AHM Forhadul Islam 12 Apr 2017-04-12 12:27 '17 pada 12:27 2017-04-12 12:27

Jika Anda tidak tertarik untuk menyimpan perubahan yang tidak ditentukan (terutama jika perubahan bertahap adalah file baru), saya merasa nyaman:

 git diff | git apply --reverse 
41
28 июля '11 в 8:27 2011-07-28 08:27 jawabannya diberikan oleh Joshua Kunzmann 28 Juli '11 pada 8:27 2011-07-28 08:27

Ketika Anda memasukkan status git (gunakan "git checkout -..." untuk membuang perubahan di direktori kerja) .

misalnya. git checkout -- .

39
17 мая '16 в 14:27 2016-05-17 14:27 jawabannya diberikan oleh Erdem ÖZDEMİR 17 Mei '16 pada 14:27 2016-05-17 14:27

git checkout -f


man git-checkout :

-f, --force

Saat berganti cabang, terus bekerja, bahkan jika indeks atau pohon kerja berbeda dari HEAD. Ini digunakan untuk menghapus perubahan lokal.

Saat memeriksa jalur dari indeks, jangan gagal untuk entri yang tidak sah; sebaliknya, entri yang diabaikan akan diabaikan.

38
17 мая '14 в 5:28 2014-05-17 05:28 jawabannya diberikan Bijan 17 Mei '14 pukul 5:28 2014-05-17 05:28

Anda dapat menggunakan simpanan git - jika terjadi kesalahan, Anda masih dapat kembali dari dompet Anda. Seperti jawaban lain di sini, tetapi yang ini juga menghapus semua file yang dihapus, serta semua penghapusan yang dihapus:

 git add . git stash 

jika Anda memeriksa apakah semuanya baik-baik saja, jatuhkan cache:

 git stash drop 

Jawaban dari Bilal Maqsood menggunakan git clean juga bekerja untuk saya, tetapi dengan aplikasi saya memiliki lebih banyak kontrol - jika saya tidak sengaja melakukan ini, saya masih dapat mengembalikan perubahan saya

PEMBARUAN

Saya pikir ada perubahan lain (saya tidak tahu mengapa itu berhasil untuk saya sebelumnya):

git add . -A git add . -A bukannya git add .

tanpa -A file yang dihapus tidak akan ditempatkan

33
11 сент. Jawabannya diberikan Asped 11 September 2015-09-11 14:59 '15 pukul 14:59 2015-09-11 14:59

Alih-alih membuang perubahan, saya mengatur u>

Oleh karena itu, saya melakukan ini untuk memastikan bahwa mereka tidak duduk di sana ketika saya git reset (nanti - mengecualikan gitignores di Origin / branchname)

CATATAN Jika Anda ingin file-file tersebut belum dilacak, tetapi tidak di GITIGNORE, Anda dapat melewati >

 git add --all 

Lalu saya

 git fetch --all 

Lalu saya reset ke awal

 git reset --hard origin/branchname 

Ini akan mengembalikannya ke alun-alun. Sama seperti kloning u>

Komentar yang diperbarui untuk pengguna di bawah ini: Ubah untuk mengatur u>

 git reset --hard @{u} 
31
08 авг. Jawabannya diberikan Nick 08 Agustus. 2015-08-08 00:15 '15 pada 0:15 2015-08-08 00:15

Jika Anda hanya ingin menghapus perubahan pada file yang ada , gunakan checkout ( didokumentasikan di sini ).

 git checkout -- . 
  • Tidak ada cabang yang ditentukan, jadi itu memeriksa cabang saat ini.
  • Tanda hubung ganda ( -- ) memberi tahu Geeta bahwa yang berikut harus diambil untuk argumen kedua (jalur), bahwa Anda melewatkan spesifikasi cabang.
  • Periode ( . ) Menunjukkan semua jalur.

Jika Anda ingin menghapus file yang ditambahkan sejak komit terakhir, gunakan clean ( didokumentasikan di sini ):

 git clean -i 
  • -i memulai clean interaktif untuk mencegah penghapusan yang salah.
  • Ada beberapa opsi lain yang tersedia untuk eksekusi lebih cepat; lihat dokumentasi.

Jika Anda ingin memindahkan perubahan ke ruang penyimpanan untuk akses nanti , gunakan stash ( didokumentasikan di sini ):

 git stash 
  • Semua perubahan akan ditransfer ke Git Stash untuk kemungkinan akses selanjutnya.
  • Beberapa opsi tersedia untuk penyimpanan yang lebih baik; lihat dokumentasi.
25
18 марта '18 в 3:19 2018-03-18 03:19 Jawaban diberikan oleh jtheletter pada 18 Maret '18 pukul 3:19 ; 2018-03-18 03:19

Saya mencoba semua solusi di atas, tetapi masih tidak bisa menyingkirkan file yang baru dihapus.

Gunakan git clean -f untuk menghapus file-file baru ini - dengan hati-hati! Perhatikan parameter daya.

25
15 окт. balasan yang diberikan oleh artur 15 Okt 2011-10-15 00:07 '11 pada 0:07 2011-10-15 00:07

katakan saja

 git stash 

Ini akan menghapus semua perubahan lokal Anda. Anda juga bisa menggunakannya nanti dengan mengatakan

 git stash apply 

atau git simpanan pop

20
24 апр. jawaban yang diberikan oleh piyushmandovra pada 24 April 2015-04-24 15:19 '15 pada 15:19 2015-04-24 15:19

Cukup gunakan:

 git stash -u 

Sudah selesai. Mudah

Jika Anda benar-benar peduli dengan tumpukan stack, Anda dapat mengikuti dengan git stash drop . Tetapi pada saat ini Anda sebaiknya menggunakan (dari Mariusz Nowak):

 git checkout -- . git clean -df 

Namun, saya paling suka git stash -u , karena "membuang" semua perubahan yang terlacak dan belum teruji hanya dalam satu perintah. Masih git checkout -- . hanya membuang perubahan yang terlacak, dan git clean -df hanya membuang perubahan yang git clean -df ... dan memasukkan kedua perintah terlalu banyak bekerja :)

20
08 сент. Balas diberikan oleh Ben Wilde 08 Sep 2016-09-08 09:19 '16 pada 9:19 2016-09-08 09:19

Ia bahkan bekerja di direktori; di luar izin git normal.

 sudo chmod -R 664 ./*  git checkout -- .  git clean -dfx 

Itu terjadi baru-baru ini

16
05 сент. Jawabannya diberikan oleh GlassGhost 05 Sep. 2013-09-05 12:38 '13 pada 12:38 2013-09-05 12:38
 cd path_to_project_folder # take you to your project folder/working directory git checkout . # removes all unstaged changes in working directory 
14
30 мая '14 в 12:26 2014-05-30 12:26 jawabannya diberikan vivekporwal04 30 Mei, '14 pukul 12:26 2014-05-30 12:26

Apa pun status repo Anda, Anda selalu dapat mengatur u>

 git reset --hard <commit hash> 

Ini akan membatalkan semua perubahan yang dilakukan setelah komit ini.

10
05 февр. jawabannya diberikan msangel 05 feb . '16 jam 3:59