Saya ingin menghapus semua perubahan pada copy pekerjaan saya.
Menjalankan git status
menunjukkan file yang dimodifikasi.
Sepertinya tidak ada yang saya lakukan untuk menghapus modifikasi ini.
Misalnya:
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout -- Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout `git ls-files -m`
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git reset --hard HEAD
HEAD is now at 6c857e7 boo libraries updated to 2.0.9.2 and rhino.dsl.dll updated.
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
git
revert
git-status
working-copy
rukun
sumber
sumber
git reset --hard
tidak bekerja di sini. Catatan: seharusnyagit checkout -- `git ls-files -m`
membatalkan file (--
)checkout -- <file>
harus berfungsi. Deteksi perubahan agak pilih-pilih dalam beberapa situasi (antara lain jika ketidakcocokan CRLF hadir)git update-index --assume-unchaged
memaksa keadaan file yang tidak beraturan (bahkan untuk file yang diubah!)Jawaban:
Ada beberapa masalah yang dapat menyebabkan perilaku ini:
Normalisasi akhiran garis
Saya juga punya masalah seperti ini. Itu turun ke git secara otomatis mengkonversi crlf ke lf. Ini biasanya disebabkan oleh akhir baris campuran dalam satu file. File akan dinormalisasi dalam indeks, tetapi ketika git kemudian mendenormalkannya lagi untuk berbeda dengan file di pohon yang bekerja, hasilnya berbeda.
Tetapi jika Anda ingin memperbaikinya, Anda harus menonaktifkan core.autocrlf , ubah semua ujung baris menjadi Jika, dan kemudian aktifkan lagi. Atau Anda dapat menonaktifkannya sama sekali dengan melakukan:
Alih-alih core.autocrlf , Anda juga dapat mempertimbangkan untuk menggunakan
.gitattribute
file. Dengan cara ini, Anda dapat memastikan semua orang menggunakan repo menggunakan aturan normalisasi yang sama, mencegah akhir baris campuran masuk ke dalam repositori.Juga pertimbangkan untuk mengatur core.safecrlf untuk memperingatkan jika Anda ingin git memperingatkan Anda ketika normalisasi yang tidak dapat dibalik akan dilakukan.
Manual git mengatakan ini:
Sistem file case-insensitive
Pada sistem file case-insensitive, ketika nama file yang sama dengan casing berbeda ada di repositori, git mencoba untuk checkout keduanya, tetapi hanya satu yang berakhir pada sistem file. Ketika git mencoba membandingkan yang kedua, ia akan membandingkannya dengan file yang salah.
Solusinya adalah beralih ke sistem file yang tidak sensitif terhadap kasus, tetapi ini dalam kebanyakan kasus tidak layak atau mengganti nama dan melakukan salah satu file pada sistem file lain.
sumber
git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d
. Untuk membuat daftar nama huruf besar dan kecil dari file tersebut jalankangit ls-tree -r --name-only HEAD | fgrep -i -f <(git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d) | sort -i
Saya mengalami masalah ini pada Windows tetapi tidak siap untuk melihat konsekuensi dari penggunaannya.
config --global core.autocrlf false
Saya juga tidak siap untuk meninggalkan cabang dan barang pribadi lainnya di simpanan saya dan mulai dengan klon baru. Saya hanya perlu menyelesaikan sesuatu. Sekarang.Ini berhasil bagi saya, dengan gagasan bahwa Anda membiarkan git menulis ulang direktori kerja Anda sepenuhnya:
(Perhatikan bahwa menjalankan saja
git reset --hard
tidak cukup baik dan juga tidak adarm
pada file sebelumreset
seperti yang disarankan dalam komentar untuk pertanyaan asli)sumber
core.autocrlf
tidak berpengaruh.core.autocrlf false
. Jawaban ini berhasil ketika tidak ada yang lain.Solusi lain yang dapat bekerja untuk orang, karena tidak ada opsi teks yang berfungsi untuk saya:
.gitattributes
dengan satu baris:* binary
. Ini memberitahu git untuk memperlakukan setiap file sebagai file biner yang tidak dapat digunakannya.git checkout -- <files>
mengembalikannya ke versi repositorigit checkout -- .gitattributes
untuk mengembalikan.gitattributes
file ke kondisi awalsumber
.gitattributes
kembali ke aslinya akan memperkenalkan kembali masalah yang sama, tetapi sayangnya masalah saya sekarang terpecahkan. Tidak ada saran lain yang berhasil dalam kasus saya.git status
, itu menemukan bahwa mereka adalah file yang berbeda. Ketika Anda bertanyagit checkout
, ia menemukan bahwa mereka memiliki konten yang sama. Solusi ini sementara memerintahkan git untuk mengabaikan kepintaran akhir baris yang mungkin, dan memastikan bahwa salinan lokal Anda adalah byte-untuk-byte yang identik dengan ituHEAD
. Setelah itu diselesaikan, mengizinkan kepintaran untuk melanjutkan tidak apa-apa, karena itu tidak akan menambah kesalahan baru.Untuk orang-orang di masa depan yang mengalami masalah ini: Memiliki perubahan filemode juga dapat memiliki gejala yang sama.
git config core.filemode false
akan memperbaikinya.sumber
git checkout .
git diff
dan itu akan menampilkan file dengan perubahan mode seperti iniold mode 100755 / new mode 100644
.Ini telah membuatku gila, terutama karena aku tidak bisa memperbaikinya tanpa ada solusi yang ditemukan online. Inilah cara saya menyelesaikannya. Tidak dapat mengambil kredit di sini karena ini adalah karya seorang rekan :)
Sumber masalah: Instalasi awal git saya tanpa konversi baris otomatis di windows. Ini menyebabkan komit awal saya ke GLFW menjadi tanpa garis akhir yang tepat.
Setup: Xubuntu 12.04 Git repo dengan proyek glfw
Masalah: Tidak dapat mengatur ulang file glfw. Mereka selalu ditampilkan sebagai dimodifikasi, terlepas dari apa yang saya coba.
Terpecahkan:
sumber
Saya punya file .bat dengan masalah yang sama (tidak bisa menghapusnya dalam file yang tidak terlacak). git checkout - tidak berfungsi, juga tidak ada saran di halaman ini. Satu-satunya hal yang berhasil bagi saya adalah melakukan:
Dan kemudian untuk menghapus simpanan:
sumber
--keep-index
ini penting.Mendapat masalah yang sama dua kali! Kedua kali ketika menyimpan beberapa perubahan yang saya buat dan kemudian mencoba untuk mengembalikannya. Tidak bisa menampilkan perubahan karena saya punya banyak file yang diubah - tetapi TIDAK! Persis sama.
Saya sekarang berpikir saya sudah mencoba semua solusi di atas tanpa hasil. Setelah mencoba
Sekarang saya mendapatkan hampir semua file di repositori saya dimodifikasi.
Ketika membuat file berbeda, dikatakan saya telah menghapus semua baris dan kemudian menambahkannya lagi.
Agak mengganggu. Saya sekarang akan menghindari menyembunyikan di masa depan ..
Satu-satunya solusi adalah mengkloning repositori baru dan memulai dari awal. (Berhasil terakhir kali)
sumber
Coba lakukan a
Itu harus menghapus semua perubahan dalam repo lokal yang berfungsi saat ini
sumber
git checkout -f <another recent branch>
kemudian kembali ke cabang saya dengangit checkout -f <branch I'm working on>
Saya hanya dapat memperbaiki ini dengan menghapus sementara file .gitattributes repo saya (yang didefinisikan
* text=auto
dan*.c text
).Saya berlari
git status
setelah menghapus dan modifikasi hilang. Mereka tidak kembali bahkan setelah atribut .Git ditempatkan kembali di tempatnya.sumber
Memiliki akhiran garis yang konsisten adalah hal yang baik. Misalnya itu tidak akan memicu penggabungan yang tidak perlu, meskipun sepele. Saya telah melihat Visual Studio membuat file dengan akhiran garis campuran.
Juga beberapa program seperti bash (di linux) mengharuskan file .sh dihentikan LF.
Untuk memastikan ini terjadi, Anda dapat menggunakan gitattributes. Ia bekerja pada level repositori, apa pun nilai autcrlf.
Misalnya, Anda dapat memiliki .gitattributes seperti ini: * text = auto
Anda juga bisa lebih spesifik per jenis file / ekstensi jika itu penting dalam kasus Anda.
Kemudian autocrlf dapat mengonversi akhiran baris untuk program Windows secara lokal.
Pada campuran C # / C ++ / Java / Ruby / R, proyek Windows / Linux ini bekerja dengan baik. Sejauh ini tidak ada masalah.
sumber
Saya juga memiliki gejala yang sama tetapi disebabkan oleh hal yang berbeda.
Saya tidak dapat untuk:
bahkan di
git rm --cached app.js
atasnya menandatangani sebagai dihapus dan dalam file yang tidak terlacak saya bisa melihat app.js. Tetapi ketika saya mencobarm -rf app.js
dan mengupasgit status
lagi itu masih menunjukkan saya file dalam 'tidak terlacak'.Setelah beberapa kali mencoba dengan kolega kami menemukan, bahwa itu disebabkan oleh Grunt!
Ketika
Grunt
telah dinyalakan, dan karena app.js telah dihasilkan dari beberapa file js lainnya, kami mengetahui bahwa setelah setiap operasi dengan file js (juga app.js) ini, kembali membuat ulang app.js.sumber
Masalah ini juga dapat terjadi ketika kontributor repo bekerja di mesin Linux, atau jendela dengan Cygwin dan izin file diubah. Git hanya tahu 755 dan 644.
Contoh masalah ini dan cara memeriksanya:
Untuk menghindari ini, Anda harus memastikan bahwa Anda mengatur git dengan benar
sumber
Ada banyak solusi di sini dan saya mungkin harus mencoba beberapa dari ini sebelum saya membuat sendiri. Lagi pula, ini satu lagi ...
Masalah kami adalah bahwa kami tidak memiliki penegakan untuk endline dan repositori memiliki campuran DOS / Unix. Lebih buruk lagi adalah bahwa itu sebenarnya repo sumber terbuka di posisi ini, dan yang kami telah bercabang dua. Keputusan itu dibuat oleh orang-orang dengan kepemilikan utama repositori OS untuk mengubah semua endline menjadi Unix dan komit dibuat yang mencakup a
.gitattributes
untuk menegakkan akhir baris.Sayangnya ini sepertinya menyebabkan masalah seperti yang dijelaskan di sini di mana setelah penggabungan kode dari sebelum DOS-2-Unix dilakukan, file akan selamanya ditandai sebagai diubah dan tidak dapat dikembalikan.
Selama penelitian saya untuk ini saya menemukan - https://help.github.com/articles/dealing-with-line-endings/ - Jika saya menghadapi masalah ini lagi, saya akan mulai dengan mencoba ini.
Inilah yang saya lakukan:
Saya awalnya melakukan penggabungan sebelum menyadari bahwa saya memiliki masalah ini dan harus membatalkannya -
git reset --hard HEAD
( Saya mengalami konflik penggabungan. Bagaimana saya bisa membatalkan penggabungan? )Saya membuka file yang dimaksud di VIM dan berubah menjadi Unix (
:set ff=unix
). Alat seperti inidos2unix
bisa digunakan sebagai ganti tentu sajaberkomitmen
menggabungkan
master
in (master memiliki perubahan DOS-2-Unix)git checkout old-code-branch; git merge master
Konflik yang diselesaikan dan file-file itu DOS lagi jadi harus
:set ff=unix
ketika di VIM. (Catatan saya telah menginstal https://github.com/itchyny/lightline.vim yang memungkinkan saya melihat format file pada status VIM)sumber
Masalah yang saya temui adalah windows tidak peduli dengan kapitalisasi nama file, tetapi git tidak. Jadi git menyimpan versi file yang lebih kecil dan besar tetapi hanya bisa checkout satu.
sumber
Saya melakukan semua perubahan dan kemudian melakukan dan membatalkan komit. Ini berhasil untuk saya
git add.
git commit -m "Komit acak"
atur ulang git --hard HEAD ~ 1
sumber
Biasanya, di GIT untuk menghapus semua modifikasi Anda & file baru, 2 perintah berikut harus bekerja dengan sangat baik ( HATI - HATI , ini akan menghapus semua file + folder baru Anda yang mungkin Anda buat & akan mengembalikan semua file Anda yang dimodifikasi ke keadaan saat ini Anda melakukan ):
Mungkin opsi yang lebih baik kadang-kadang hanya melakukan "git stash push" dengan pesan opsional, seperti:
Ini juga akan menghapus semua file baru dan modifikasi Anda, tetapi Anda akan menyimpan semuanya jika Anda ingin mengembalikannya. Stash in GIT membawa dari cabang ke cabang, sehingga Anda dapat mengembalikannya ke cabang lain, jika diinginkan.
Sebagai catatan, jika Anda telah melakukan beberapa file yang baru ditambahkan dan ingin menyingkirkannya, ini harus dilakukan:
Jika semua hal di atas tidak bekerja untuk Anda , baca di bawah ini apa yang bekerja untuk saya beberapa saat yang lalu:
Saya mengalami masalah ini beberapa kali sebelumnya. Saat ini saya sedang mengembangkan mesin Windows 10 yang disediakan oleh perusahaan saya. Hari ini, perilaku git khusus ini disebabkan oleh saya membuat cabang baru dari cabang "berkembang" saya. Untuk beberapa alasan, setelah saya beralih kembali ke "mengembangkan" cabang, beberapa file yang tampaknya acak bertahan dan muncul sebagai "dimodifikasi" dalam "status git".
Juga, pada saat itu saya tidak bisa checkout cabang lain, jadi saya terjebak di cabang "berkembang" saya.
Inilah yang saya lakukan:
Saya perhatikan bahwa cabang baru yang saya buat dari "berkembang" sebelumnya hari ini menunjukkan dalam pesan "komit" pertama, yang direferensikan pada akhir "KEPALA -> mengembangkan, asal / mengembangkan, asal / KEPALA, cabang-i-dibuat -lebih dulu-hari ini ".
Karena saya tidak benar-benar membutuhkannya, saya menghapusnya:
File yang diubah masih muncul, jadi saya lakukan:
Ini menyelesaikan masalah saya:
Tentu saja
$ git stash list
akan menunjukkan perubahan simpanan, dan karena saya memiliki sedikit dan tidak memerlukan simpanan saya, saya lakukan$ git stash clear
untuk HAPUS SEMUA GAGASAN.CATATAN : Saya belum mencoba melakukan apa yang disarankan seseorang di sini sebelum saya:
Ini mungkin berhasil juga, saya pasti akan mencobanya lain kali saya mengalami masalah ini.
sumber
Jika Anda mengkloning repositori dan langsung melihat perubahan yang tertunda, maka repositori dalam kondisi tidak konsisten. Tolong JANGAN berkomentar keluar
* text=auto
dari.gitattributes
file. Itu diletakkan di sana secara khusus karena pemilik repositori ingin semua file disimpan secara konsisten dengan ujung garis LF.Sebagaimana dinyatakan oleh HankCa, mengikuti petunjuk di https://help.github.com/articles/dealing-with-line-endings/ adalah cara untuk memperbaiki masalah tersebut. Tombol mudah:
Kemudian gabungkan (atau tarik permintaan) cabang ke pemilik repo.
sumber
Tidak ada hal lain di halaman ini yang berfungsi. Ini akhirnya berhasil untuk saya. Menampilkan tidak ada file tidak terlacak, atau berkomitmen.
sumber
Bagi saya masalahnya adalah Visual Studio dibuka ketika melakukan perintah
git checkout <file>
Setelah menutup Visual Studio, perintah itu berhasil dan saya akhirnya bisa menerapkan pekerjaan saya dari stack. Jadi periksa semua aplikasi yang dapat membuat perubahan pada kode Anda, misalnya SourceTree, SmartGit, NotePad, NotePad ++ dan editor lainnya.
sumber
Kami menghadapi situasi serupa di perusahaan kami. Tidak ada metode yang diusulkan tidak membantu kami. Sebagai hasil dari penelitian, masalah terungkap. Masalahnya adalah bahwa di Git ada dua file, yang namanya hanya berbeda dalam register simbol. Sistem Unix melihat mereka sebagai dua file yang berbeda, tetapi Windows menjadi gila. Untuk mengatasi masalah tersebut, kami menghapus salah satu file di server. Setelah itu, di repositori lokal di Windows membantu beberapa perintah berikutnya (dalam urutan yang berbeda):
sumber
Saya menyelesaikannya dengan mengedit .git / config, menambahkan:
Kemudian saya pergi ke .git / refs / heads / name_branch dan menempatkan id dari commit terakhir
enter code here
sumber
Saya memecahkannya dengan cara ini:
Itu yang berhasil untuk saya.
sumber
Salah satu solusi yang diusulkan di sini tidak berhasil, saya menemukan file itu sebenarnya adalah tautan ke beberapa karakter khusus:
sumber