Setelah itu git reset --hard
, git status
beri saya file di dalam Changes not staged for commit:
bagian.
Saya juga sudah mencoba git reset .
, git checkout -- .
dan git checkout-index -f -a
, tidak berhasil.
Jadi, bagaimana saya bisa menyingkirkan perubahan yang tidak dipentaskan?
Ini sepertinya mengenai hanya file proyek Visual Studio. Aneh. Lihat tempel ini: http://pastebin.com/eFZwPn9Z . Apa yang istimewa dengan file-file itu, adalah bahwa dalam .gitattributes yang saya miliki:
*.sln eol=crlf
*.vcproj eol=crlf
*.vcxproj* eol=crlf
Juga, autocrlf
disetel ke false di global saya .gitconfig
. Mungkinkah itu relevan?
.
singkatan direktori saat ini bukan direktori rootgit
versimu? Entah Anda membuat kesalahan konyol atau Anda memiliki versi lama yang buggy?Jawaban:
Saya memiliki masalah yang sama dan itu terkait dengan
.gitattributes
file tersebut. Namun tipe file yang menyebabkan masalah tidak ditentukan dalam.gitattributes
.Saya bisa menyelesaikan masalah dengan hanya menjalankan
sumber
git rm .gitattributes
menghapus .gitattributes dari indeks.git add -A
menambahkan semua (termasuk penghapusan .gitattributes) untuk indeks, yang seharusnya maka hanya menjadi penghapusan .gitattributes, jika itu benar-benar masalah.git reset --hard
mengatur ulang semua perubahan yang tidak dikomit, yang akan mencakup penghapusan .gitattributes. Pada dasarnya, ini mengabaikan .gitattributes (dan* text=auto
arahan) untuk satu komit dengan menghapusnya, kemudian mengatur ulang indeks saat itu dihapus, oleh karena itu mengembalikannya, tetapi setelah Anda sudah mengatur ulang file lain, sehingga mereka tidak dimodifikasi lagi..gitattributes
: "fatal: pathspec '.gitattributes' tidak cocok dengan file mana pun"fatal: pathspec '.gitattributes' did not match any files
. Apa yang saya lakukan salah?TERSELESAIKAN!!!
Saya telah mengatasi masalah ini menggunakan langkah-langkah berikut
1) Hapus setiap file dari indeks Git.
2) Tulis ulang indeks Git untuk mengambil semua akhiran baris baru.
Solusi adalah bagian dari langkah-langkah yang dijelaskan di situs git https://help.github.com/articles/dealing-with-line-endings/
sumber
Git tidak akan mengatur ulang file yang tidak ada di repositori. Jadi kamu bisa:
Ini akan membuat semua perubahan, yang akan menyebabkan Git menyadari file-file itu, dan kemudian mengatur ulangnya.
Jika ini tidak berhasil, Anda dapat mencoba menyembunyikan dan menjatuhkan perubahan Anda:
sumber
git reset --hard
untuk " mengatur ulang area pementasan dan direktori kerja agar sesuai "? Jika suatu file tidak dipentaskan, jelas kami ingin menghapusnya saat melakukannyareset --hard
.Jika Anda menggunakan Git untuk Windows, kemungkinan ini adalah masalah Anda
Saya memiliki masalah dan simpanan yang sama, hard reset, bersih atau bahkan semuanya masih meninggalkan perubahan. Apa yang menjadi masalah adalah mode file x yang tidak diatur dengan benar oleh git. Ini adalah "masalah yang diketahui" dengan git untuk windows. Perubahan lokal menunjukkan dalam status gitk dan git sebagai mode lama 100755 mode baru 100644, tanpa perbedaan file yang sebenarnya.
Cara mengatasinya adalah dengan mengabaikan mode file:
Info lebih lanjut di sini
sumber
rm -rf *; git checkout HEAD .
tidak. Fiuh!Oke, saya sudah memecahkan masalah.
Tampaknya
.gitattributes
file itu, berisi:membuat file proyek tampak tidak panggung. Saya tidak mengerti mengapa demikian, dan saya benar-benar berharap seseorang yang mengetahui cara-cara git akan memberi kita penjelasan yang bagus.
Perbaikan saya adalah menghapus file-file ini, dan menambahkan di
autocrlf = false
bawah[core]
.git/config
.Ini tidak sama persis dengan konfigurasi sebelumnya, karena memerlukan setiap pengembang untuk memilikinya
autocrlf = false
. Saya ingin mencari perbaikan yang lebih baik.EDIT:
Saya mengomentari garis memberatkan, membatalkan komentar dan itu berhasil. Apa ... aku bahkan tidak ...!
sumber
autocrlf = false
. Saya menggabungkan perubahan dari upo svn repo (git svn fetch
/git merge git-svn
) dan dibiarkan dengan 1 file ditandai sebagai dimodifikasi. Yang aneh adalah bahwa saya pernah mengalami masalah ini sebelumnya dan yang perlu saya lakukan adalah memeriksa cabang lain (dengan-f
bendera), dan kemudian beralih kembali. Saya melakukan itu, dan itu berhasil, tetapi ketika saya beralih ke cabang fitur, "perubahan" telah kembali! Hasil edit Anda di bagian bawah jawaban adalah solusinya. Dalam kasus saya, saya berkomentar / menghapus komentar satu baris di bagian atas file .gitattributes saya:* text=auto !eol
.gitattributes
, jalankangit status
, batalkan komentar pada baris tersebut.gitattributes
, jalankangit status
lagi.gitattributes
lagi. Thegit diff
mungkin menunjukkan terkenal dinding merah / dinding hijau yang khas dari perbedaan line-berakhir.Kemungkinan Penyebab # 1 - Normalisasi Akhir Baris
Satu situasi di mana ini bisa terjadi adalah ketika file tersebut diperiksa ke dalam repositori tanpa konfigurasi yang benar untuk akhir baris (1) menghasilkan file dalam repositori dengan salah satu akhir baris yang salah, atau akhir baris campuran. Untuk mengonfirmasi, verifikasi yang
git diff
hanya menunjukkan perubahan di akhir baris (ini mungkin tidak terlihat secara default, cobagit diff | cat -v
lihat carriage return sebagai^M
karakter literal ).Selanjutnya, seseorang mungkin menambahkan
.gitattributes
atau mengubahcore.autocrlf
pengaturan untuk menormalkan akhir baris (2). Berdasarkan pada.gitattributes
atau konfigurasi global, Git telah menerapkan perubahan lokal pada copy pekerjaan Anda yang menerapkan normalisasi akhir baris yang diminta. Sayangnya, untuk beberapa alasangit reset --hard
tidak membatalkan perubahan normalisasi garis ini.Larutan
Penanganan masalah di mana ujung jalur lokal diatur ulang tidak akan menyelesaikan masalah. Setiap kali file "dilihat" oleh git, ia akan mencoba dan menerapkan kembali normalisasi, menghasilkan masalah yang sama.
Pilihan terbaik adalah membiarkan git menerapkan normalisasi yang diinginkannya dengan menormalisasi semua akhir baris dalam repo agar sesuai dengan
.gitattributes
, dan melakukan perubahan itu - lihat Mencoba memperbaiki akhir baris dengan git-cabang-filter, tetapi tidak berhasil .Jika Anda benar-benar ingin mencoba dan mengembalikan perubahan ke file secara manual maka solusi termudah tampaknya menghapus file yang dimodifikasi, dan kemudian memberitahu git untuk mengembalikannya, walaupun saya perhatikan solusi ini tampaknya tidak bekerja secara konsisten 100% dari waktu ( PERINGATAN: JANGAN jalankan ini jika file Anda yang dimodifikasi memiliki perubahan selain dari akhir baris !!):
Perhatikan bahwa, kecuali jika Anda menormalkan akhir baris di repositori di beberapa titik, Anda akan terus mengalami masalah ini.
Kemungkinan Penyebab # 2 - Ketidaksensitifan Kasus
Penyebab kedua yang mungkin adalah ketidakpekaan huruf pada Windows atau Mac OS / X. Misalnya, katakan path seperti yang berikut ini ada di repositori:
/foo/bar
Sekarang seseorang di Linux melakukan file ke
/foo/Bar
(mungkin karena alat membangun atau sesuatu yang membuat direktori itu) dan mendorong. Di Linux, ini sebenarnya sekarang adalah dua direktori yang terpisah:Memeriksa repo ini pada Windows atau Mac dapat mengakibatkan modifikasi
fileA
yang tidak dapat direset, karena pada setiap reset, git pada Windows memeriksa/foo/bar/fileA
, dan kemudian karena Windows tidak peka huruf besar-kecil, menimpa kontenfileA
dengan/foo/Bar/fileA
, yang mengakibatkan mereka "dimodifikasi".Kasus lain mungkin merupakan file individual yang ada dalam repo, yang ketika diperiksa pada sistem file case tidak sensitif, akan tumpang tindih. Sebagai contoh:
Mungkin ada situasi serupa lainnya yang dapat menyebabkan masalah seperti itu.
git pada kasus filesystem tidak sensitif harus benar-benar mendeteksi situasi ini dan menunjukkan pesan peringatan yang bermanfaat, tetapi saat ini tidak (ini dapat berubah di masa depan - lihat diskusi ini dan usulan tambalan terkait pada milis git.git).
Larutan
Solusinya adalah untuk membawa kasus file dalam indeks git dan kasus pada sistem file Windows menjadi sejajar. Ini bisa dilakukan di Linux yang akan menunjukkan keadaan sebenarnya, ATAU di Windows dengan utilitas open source yang sangat berguna Git-Unite . Git-Unite akan menerapkan perubahan kasus yang diperlukan untuk indeks git, yang kemudian dapat dilakukan untuk repo.
(1) Ini kemungkinan besar dilakukan oleh seseorang yang menggunakan Windows, tanpa
.gitattributes
definisi untuk file yang dimaksud, dan menggunakan pengaturan global default untukcore.autocrlf
yang mana adalahfalse
(lihat (2)).(2) http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/
sumber
Jika jawaban lain tidak berfungsi, coba tambahkan file, lalu setel ulang
Dalam kasus saya, ini membantu ketika ada banyak file kosong yang dilacak git.
sumber
$ git add .
bukan$ git add -A
Penyebab lain untuk ini mungkin sistem file case-insensitive . Jika Anda memiliki beberapa folder di repo Anda pada tingkat yang sama yang namanya hanya berbeda per kasus, Anda akan terkena dampaknya. Jelajahi repositori sumber menggunakan antarmuka webnya (mis. GitHub atau VSTS) untuk memastikan.
Untuk informasi lebih lanjut: https://stackoverflow.com/a/2016426/67824
sumber
git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d
Anda dapat
stash
menghapus perubahan Anda, lalu membuang simpanan:sumber
Tak satu pun dari metode ini bekerja untuk saya, satu-satunya solusi adalah dengan membatalkan seluruh repo dan mengkloningnya. Ini termasuk menyimpan, mengatur ulang, menambahkan kemudian mengatur ulang, pengaturan CLRF, sensitivitas huruf dll.
sumber
Jalankan perintah bersih :
sumber
.gitattributes
akhiran file dan baris tidak menjadi masalah karena saya di kotak linux dan semua devs dan server kami adalah linux.Periksa
.gitattributes
.Dalam kasus saya, saya punya
*.js text eol=lf
di dalamnya dan opsi gitcore.autocrlf
adalahtrue
.Ini membawa saya ke situasi ketika git secara otomatis mengkonversi akhir baris file saya dan mencegah saya untuk memperbaikinya dan bahkan
git reset --hard HEAD
tidak melakukan apa-apa.Saya memperbaikinya dengan berkomentar
*.js text eol=lf
di saya.gitattributes
dan membatalkan komentar setelahnya.Sepertinya itu hanya sihir git.
sumber
*.bat text eol=crlf
ke proyek saya.Saya mengalami masalah serupa juga melibatkan
.gitattributes
, tetapi untuk kasus saya melibatkan LFS GitHub. Meskipun ini bukan skenario OP, saya pikir ini memberikan kesempatan untuk menggambarkan apa yang dilakukan.gitattributes
file dan mengapa hal itu dapat menyebabkan perubahan yang tidak dipentaskan dalam bentuk perbedaan "hantu".Dalam kasus saya, file sudah ada di repositori saya, seperti sejak awal waktu. Dalam komit baru-baru ini, saya menambahkan
git-lfs track
aturan baru menggunakan pola yang agak terlalu luas di belakang, dan akhirnya cocok dengan file kuno ini. Saya tahu saya tidak ingin mengubah file ini; Saya tahu saya tidak mengubah file, tetapi sekarang file itu dalam perubahan saya yang tidak dipentaskan dan tidak ada jumlah checkout atau hard reset pada file yang akan memperbaikinya. Mengapa?Ekstensi GitHub LFS terutama bekerja dengan memanfaatkan kait yang
git
menyediakan akses melalui.gitattributes
file. Secara umum, entri dalam.gitattributes
menentukan bagaimana file yang cocok harus diproses. Dalam kasus OP, itu berkaitan dengan normalisasi ujung garis; di tambang, itu adalah apakah membiarkan LFS menangani penyimpanan file. Dalam kedua kasus, file sebenarnya yanggit
dilihat saat menghitung agit diff
tidak cocok dengan file yang Anda lihat saat Anda memeriksa file. Oleh karena itu, jika Anda mengubah cara file diproses melalui.gitattributes
pola yang cocok dengan itu, itu akan muncul sebagai perubahan yang tidak dipentaskan dalam laporan status, bahkan jika benar-benar tidak ada perubahan dalam file.Semua yang mengatakan, "jawaban" saya untuk pertanyaan adalah bahwa jika perubahan dalam
.gitattributes
file adalah sesuatu yang ingin Anda lakukan, Anda harus benar-benar hanya menambahkan perubahan dan melanjutkan. Jika tidak, maka ubah.gitattributes
untuk lebih mewakili apa yang ingin Anda lakukan.Referensi
Spesifikasi GitHub LFS - Deskripsi hebat tentang bagaimana mereka menghubungkan ke dalam
clean
dansmudge
panggilan fungsi untuk mengganti file Anda digit
objek dengan file teks sederhana dengan hash.gitattributes Documentation - Semua detail tentang apa yang tersedia untuk menyesuaikan cara
git
memproses dokumen Anda.sumber
Saya memiliki masalah yang sama. Saya lakukan
git reset --hard HEAD
tetapi masih setiap kali saya lakukangit status
saya melihat beberapa file yang dimodifikasi.Solusi saya relatif sederhana. Saya baru saja menutup IDE saya (ini Xcode) dan menutup baris perintah saya (ini terminal pada Mac OS saya) dan mencobanya lagi dan berhasil.
Namun saya tidak pernah dapat menemukan apa yang menjadi sumber masalahnya.
sumber
Saya percaya bahwa ada masalah dengan git untuk Windows di mana git secara acak menulis akhir baris yang salah pada checkout dan satu-satunya solusi adalah dengan checkout beberapa cabang lain dan memaksa git untuk mengabaikan perubahan. Kemudian checkout cabang yang ingin Anda kerjakan.
Ketahuilah bahwa ini akan membuang segala perubahan yang mungkin Anda lakukan dengan sengaja, jadi lakukan saja ini jika Anda memiliki masalah ini segera setelah checkout.
Sunting: Saya mungkin benar-benar beruntung pertama kali. Ternyata saya mendapat bit lagi setelah berganti cabang. Ternyata file git dilaporkan telah dimodifikasi setelah mengubah cabang berubah. (Rupanya karena git tidak secara konsisten menerapkan baris CRLF yang berakhir pada file dengan benar.)
Saya memperbarui ke git terbaru untuk Windows dan berharap masalahnya hilang.
sumber
Masalah serupa, meski saya yakin hanya di permukaan. Bagaimanapun, ini dapat membantu seseorang: apa yang saya lakukan (FWIW, dalam SourceTree): menyimpan file yang tidak dikomit, kemudian melakukan reset keras.
sumber
Seperti jawaban lain telah tunjukkan, masalahnya adalah karena koreksi otomatis line-end. Saya mengalami masalah ini dengan file * .svg. Saya menggunakan file svg untuk ikon dalam proyek saya.
Untuk mengatasi masalah ini, saya beri tahu git bahwa file svg harus diperlakukan sebagai biner alih-alih teks dengan menambahkan baris di bawah ini ke .gitattributes
* .svg biner
sumber
Dalam situasi yang sama. Sebagai hasil dari bertahun-tahun siksaan dengan banyak programmer yang mampu memasukkan berbagai penyandian dari ujung garis (. Asp , .js, .css ... bukan esensi) ke dalam satu file. Beberapa waktu lalu menolak .gitattributes. Pengaturan untuk repo kiri
autorclf = true
dansafecrlf = warn
.Masalah terakhir muncul ketika menyinkronkan dari arsip dengan ujung garis yang berbeda. Setelah menyalin dari arsip, dalam status git banyak file diubah dengan catatan
The line will have its original line endings in your working directory. warning: LF will be replaced by CRLF in ...
Kiat dari Bagaimana cara menormalkan ujung-ujung garis pohon yang berfungsi di Git? membantu
git add -u
sumber
Kemungkinan lain yang saya temui adalah bahwa salah satu paket di repositori berakhir dengan HEAD terpisah. Jika tidak ada jawaban di sini yang membantu dan Anda menemukan pesan status git seperti ini, Anda mungkin memiliki masalah yang sama:
Masuk ke
path/to/package
folder agit status
harus menghasilkan hasil berikut:Dan perintah berikut harus memperbaiki masalah, di mana
master
harus diganti oleh cabang lokal Anda:Dan Anda akan mendapatkan pesan bahwa cabang lokal Anda akan memiliki sejumlah komitmen di belakang cabang jarak jauh.
git pull
dan kamu harus keluar dari hutan!sumber
Untuk beberapa alasan
git add .
tidak berhasil , tapi
$ git add -A
berhasil!
sumber