Git neden dosyamın değiştirildiğini tanımıyor, bu yüzden git add çalışmıyor


100

Bash kullanarak dosyalarımı github'a göndermeye çalışıyorum. Onlar zaten oradalar ve yeni satırlar ve kodlar vb. İçeren daha yeni bir sürüm yüklüyorum. Ama denediğimde git addve sonra git statusşöyle diyor:

Şube yöneticisinde

işlenecek bir şey yok, çalışma dizini temiz

Ve kullandığım dosya değiştirildi.


4
Eğer zaten taahhüt ettiyseniz, o zaman yapacak hiçbir şeyiniz olmazdı, git log'u kontrol edin.
Grady Player

2
git diff'in çıktısı nedir?
maazza

2
@maazza Git farkından hiçbir şey alamıyorum
somerandomguy

1
Eğer git diff(veya git status) neden eklenecek hiçbir şey olmadığını açıklayan bir şey göstermiyorsa. Yani soru gerçekten şudur: "git neden dosyamın değiştirildiğini anlamıyor?"
Sunil D.

Üzgünüm çocuklar, ne olduğunu görüyorum. O C # görsel stüdyosunun onu değiştirdiğini görmüyorum, ancak notepad ++ gibi başka bir şey değiştirdiğinde görüyor
somerandomguy

Yanıtlar:


129

Bir zamanlar dosyamda git indeksini 'değişmemiş varsay' olarak ayarladığım bir sorun yaşadım.

Git'e dosyadaki değişiklikleri görmezden gelmeyi bırakmasını söyleyebilirsiniz:

git update-index --no-assume-unchanged path/to/file

Bu, sıfırlamaya yardımcı olmazsa , diğer garip durumlar için yeterli olabilir.


Pratikte, önbelleğe alınan dosyayı kaldırıp çalışmaya sıfırladığımı buldum:

git rm --cached path/to/file
git reset path/to/file

git rm --cachedSadece aracı dizinden dosya kaldırmak ve resetson tamamlama gelen git endeksi yeniden git söyler.


19
git add -f path/to/the/filekesinleştirme için dosyaları zorla ekler.
San

2
Bu cevap, sorunumun çözülmesine yardımcı olan tek şeydi. Değil emin Windows şeyse (ı var hiç ya OSX veya Linux içinde, geçmişte buna benzer herhangi bir sorun vardı). @ThorSummoner'a teşekkürler. Btw, denedim git add -fbu "varsayalım değişmeden" durumdaydı dosyayı ve öyle de oldu değil çalışma - zorundaydı ya git update-indexya git rm --cachedbir takip git resetçalışması için.
rsenna

2
Ayrıca, repo mevcut durumunuz hakkında gerçekten emin değilseniz, şunu yapın: git rm --cached -r .ve sonra git reset ..
rsenna

Denemek için başka bir seçenek var, git update-index --no-skip-worktree path/to/filebu benim sorunu çözüldü nasıl
Fr0st

1
Benim için çalıştı, ancak evet sadece tek dosya davaları.
Thomas Cheng

24

Senin Kontrol .gitignoredosyası . Çalışmaya çalıştığınız dosyanın veya uzantısının veya dosyanın yolunun, bu dosyanın .gitignoreneden yok sayıldığını (ve değiştirilmiş bir dosya olarak tanınmadığını) açıklayan bir girişle eşleştiğini görebilirsiniz .

Benim için de benzer bir sorun yaşadığımda durum böyle oldu.


1
Kullandığım gitignore.io benim .gitignore oluşturmak ve birlikte bir çizgi buldum lib/bu klasörü görmezden git kılan. Bununla ilgili bir sorun yok - en azından bu klasör bana olduğu gibi projenizin ana klasörü değilse.
Paladini

Ve benim durumumdaki herhangi biri için, aslında benim küresel hariç
tutulan dosyamdı

İlk başta bu işe yaramadı. Ama işe yaradım. Benim durumumda, göz ardı edilecek şey gitignore dosyasında iki kez belirtildi. Her zaman tüm tekrarları arayın ve tümünü değiştirin.
MasterJoe

9

Daha önce tartışıldığı gibi, dosyalar muhtemelen "assume-unchanged" ile işaretlenmiştir, bu da git'e basitçe dosyaları değiştirmeyeceğinizi, dolayısıyla onlarla değişiklikleri izlemesine gerek olmadığını söyler. Ancak bu, birden çok dosyayı etkiliyor olabilir ve geniş bir çalışma alanıysa, hepsini tek tek kontrol etmek istemeyebilirsiniz. Bu durumda deneyebilirsiniz: git update-index --really-renew

belgelere göre:

Like --refresh, but checks stat information unconditionally, without regard to the "assume unchanged" setting.

Temel olarak git'i, "değişmeyen varsayım" seçeneklerine bakılmaksızın tüm dosyaların değişikliklerini izlemeye zorlar.


2
Benim için git statushiçbir dosyanın değiştirilmediğini, ancak git add .iki dosya eklediğini ve git update-index --really-refreshbu ikisinin güncellenmeye ihtiyacı olduğunu, ancak hiçbir şey yapmadığını söylüyor. Herhangi bir fikir?
someonewithpc

2
git durumu, değişmemiş bayrağı olan dosyaları yok sayar. Ancak git update-index --really-renew kullanılması bu bayrağı temizleyecek ve dosyalar artık görünecektir. Şimdi değişiklikleri değiştirip değiştirmediğini görmek için git durumunu tekrar çalıştırmayı deneyin. Bu gönderiyi takip eden herhangi bir şey görmüyorsanız: stackoverflow.com/questions/2363197/… en önemlisi varsayım-değişimlerine sahip dosyaların bir listesini görüntüleme komutu: git ls-files -v | grep '^[[:lower:]]'Hiçbir şey yardımcı olmazsa, daha fazla ayrıntı içeren bir soru oluşturmalısınız, böylece yardımcı olabiliriz sen.
André Cunha

8

Çılgınca geliyor, ancak bazen öyle olduğunu düşünseniz bile doğru depoda değilsiniz. Örneğin, ana dizini taşımış, ancak metin düzenleyicinizde depoları değiştirmeyi unutmuş olabilirsiniz. Veya tam tersi: Metin düzenleyicide doğru depodasınız ancak komut satırında yanlış depodasınız. İlk durumda, düzenlemelerinizi doğru dosyada yaparsınız, ancak komut satırınızda açık olan klasörle aynı değildir, bu yüzden aslında yanlış dosyadır. İkinci durumda, aslında doğru dosyayı düzenlediniz, ancak git komut satırınız değişikliği tanımayacaktır çünkü komut satırında doğru dizinde değilsiniz.


7

Pekala, bu soruyu cevaplamak için yeterli bilgiye sahip değiliz, bu yüzden size birkaç tahmin vereceğim:

1) türü düzeltmek için değişikliklerinizi sakladınız: git stash pop

2) değişiklikler yaptınız ve bunları gerçekleştirdiniz, taahhütlerinizi git log

3) bir şekilde git reset --hardveya başka bir şekilde değişiklik yaptıysanız , değişiklikleriniz reflog'da olabilir, yazın git reflog --allardından kontrol edin veya bulursanız ref'i seçip seçin .

4) aynı depoyu birkaç kez kontrol ettiniz ve yanlış depodasınız.


1) zula bulunamadı 2) Değişikliklerim oldu ve taahhütte bulundum, tekrar taahhütte bulunabilir miyim? 3) Bunu yapmadım 4) Doğru
depodayım

Değişiklikleriniz olduysa ve bunları taahhüt ettiyseniz, o zaman iyisiniz, bir sonraki adıma gidin, itin veya iş akışınız ne olursa olsun ... Daha fazla değişiklik varsa tekrar taahhüt edebilirsiniz, hatta git commit --amendyeni değişikliklerinizi son taahhüdünüze koyabilirsiniz , eğer taahhüdünüzü zaten paylaştıysanız bunu yapmayın.
Grady Player

Terminali kapatıp yeniden açmak, bir proje deposunu temizledikten sonra benim için yaptı.
Eddie

4

Bunun gibi garip bir şey oldu. Eclipse Kepler'in git eklentisi, .gitignore klasöründe tüm proje klasörlerimi otomatik olarak yoksayıldı olarak işaretliyordu.

Ben var ne zaman commitüzerinde Teammenü, onlar için tüm set geri gözardı ederim. Anlayabildiğim kadarıyla, bunun nedeni onları ana projeden türetilmiş olarak ayarlamamdı. Bunların işaretini kaldırmak derviedbu sorunu çözdü . Bunu daha önce Indigo'da görmemiştim. Umarım birine yardımcı olur.


Intellij'de bu sorunun nasıl çözülebileceği hakkında bir fikriniz var mı?
MasterJoe

3

TL; DR; Doğru depoda bile misin?

Hikayem biraz komik ama bunun benzer bir senaryoya sahip olabilecek biriyle olabileceğini düşündüm, bu yüzden burada paylaşıyorum.

Aslında benim makinemde iki ayrı git deposuna sahiptim repo1ve repo2adı verilen aynı kök dizinde yapılandırdım source. Bu iki depo aslında şirketimde üzerinde çalıştığım iki ürünün depolarıdır. Şimdi mesele şu ki, standart bir kılavuz olarak tüm ürünlerin kaynak kodlarının dizin yapısı şirketimde birebir aynı.

Yani farkına varmadan repo2, değiştirmem gereken aynı isimli bir dosyayı değiştirdim repo1. Yani, ben sadece komutu çalıştırarak tuttu git statusüzerinde repo1ve aynı mesajı verdiler

Şube yöneticisinde

işlenecek bir şey yok, çalışma dizini temiz

yarım saat için. Sonra meslektaşım onu ​​bağımsız bir çift göz olarak gördü ve bu şeyi yanlış ama çok benzer görünümlü bir depoda olduğumu fark ettim. repo1Git'e geçtiğim an değişen dosyaları fark etmeye başladım.

O kadar yaygın değil. Ama sen asla bilemezsin!


3

WinMerge aracıyla farklılıkları aktararak dosyaları değiştirirken bunu Windows'ta yaşadık. Görünüşe göre WinMerge (en azından bilgisayarımda yapılandırıldığı şekilde) bazen değiştirdiği dosyaların zaman damgalarını güncellemiyor.

Windows'ta git status , diğer şeylerin yanı sıra bir dosyanın zaman damgasını kullanır ve bir dosyanın değişip değişmediğini belirlemek için dosyanın boyutundaki değişiklikleri kullanır. Dolayısıyla, zaman damgası güncellenmediğinden, yalnızca dosya boyutuna sahipti. Ne yazık ki, söz konusu dosya içeriği değiştirildi basit sürüm dosya oldu 7.1.2 için 7.2.0 . Başka bir deyişle, dosya boyutu da değişmeden kaldı. WinMerge tarafından da değiştirilen ve zaman damgaları güncellenmemiş, ancak değişikliğin git durumu tarafından algılandıktan sonra farklı bir boyuta sahip olan diğer dosyalar gayet iyi.


3

Sublime Text-3 kullanırken benzer bir sorun yaşadım . Kodda yeni değişiklikler yaptıktan ve kaydettikten sonra git add ./status komutlarını denediğimde yanıt "dallanma zaten güncel" oldu. Güncellemeleri metin düzenleyicisine kaydetmeden dosyanın aslında değişmediğini anladım. Dosyayı başka bir düzenleyicide açmak ve değişiklikleri kaydetmek benim için çalıştı.


Bu bana da oluyor
Kloar

2

Dizini kabuğunuzun altından çıkardınız mı? Bu, projenizi bir yedekten geri yüklediyseniz olabilir. Bunu düzeltmek için cddışarı çıkın ve tekrar içeri girin:

cd ../
cd -

Vay canına, durum buydu. Çılgın. Başka bir numara hiç işe yaramadı!
Makalele

1

Genel olarak bu sorunla ilgili olarak, önce olduğunuzu düşündüğünüz dosyayı düzenleyip düzenlemediğinizi kontrol edin! Kaynak dosyası yerine kopyalanmış bir JavaScript dosyasını düzenlerken bu sorunu yaşadım (kopyalanan sürüm kaynak kontrolü altında değildi).


bundan bahsettiğiniz için teşekkür ederim! Doğru dosyayı güncellediğime o kadar emindim ki. Hayır! yüz avuç içi
Ashley Grenon

1

Git istemcim (Gitg) bu soruna benim için neden oldu. Genellikle çalıştırdığım normal komutlar çalışmıyordu. Projedeki her dosyaya dokunmak bile işe yaramadı.

Düzeltmenin bir yolunu buldum ve buna neyin sebep olduğundan hala emin değilim. Proje dizininizi kopyalayın. Eksik dosyalar, kopyalanan dizinde görünecektir git status. Yeniden adlandırmak da aynı şeyi yapabilir.


1

Sorunla karşılaştım, ancak yalnızca iki dizin vardı ve bu iki dizinin de git alt modülleri olarak yapılandırıldığını bilmediğim oldu. Bunun nasıl olduğu hakkında hiçbir fikrim yok, ancak süreç bu bağlantıdaki bazı talimatları takip etmekti, ancak dizini kaldırmak DEĞİL (sonunda yaptığı gibi)git add path/to/dir


1

Visual Studio'da bir dosyayı düzenlediğinizde, dosya kaydedilmese bile anında git değişikliklerinde listelenir. Yani tek yapmanız gereken dosyayı manuel olarak kaydetmek (şu anda görüntülenen dosya için Ctrl + S veya tüm proje dosyaları için Ctrl + Shift + S) ve git bash onları alacaktır.


Bu, bir .jsdosyaya yorum eklerken Visual Studio Code ile çalışırken benim için çalıştı . Teşekkür ederim.
SnuKies

0

Ne tür bir dosya yüklemeye çalıştınız? Şimdi css değişikliğimi yüklemek için neredeyse bir saatimi harcıyorum. Ama bu css bir styl dosyasından derlendi, bu yüzden git onu yok saydı. Stil kaynağını değiştirdiğimde her şey çalıştı.

Umarım yardımcı olur.


0

Bazen bağlıdır ve git sürümüne göre ve yapmayı unutursanız git add ..

Depodaki değişikliğinizi kontrol etmek için her zaman git statustüm izlenmemiş ve değiştirilmiş dosyaları gösteren kullanın . Çünkü git diffsadece eklenen dosyaları göster.


0

Emin olun değil sembolik (oluşturmaya ln -s source destWindows için Git Bash içinden).

Sembolik bağlantılar YAPMAZ, ancak kaynağın hedefe DERİN bir kopyasını yapar

OP ile aynı davranışı, Windows için Git Bash'in (sürüm 2.16.2) bir MINGW64 terminalinde, 'düzenlenmiş' değişikliklerimin aslında orijinal dizinde olduğunu ve git bash komutlarımın kalan derin bir kopya içinde olduğunu fark ettim. değişmedi.


0

Ben de aynı sorunu yaşadım. Projenin iki kopyasına sahip olduğum ve terminalimin yanlış proje klasöründe olduğu ortaya çıktı!


0

Benim de başıma geldi, yukarıda belirtilen yöntemleri denedim ve hiçbir şey yardımcı olmadı. O zaman çözüm, dosyayı GUI değil, terminal aracılığıyla değiştirmekti. Bunun neden işe yaradığını bilmiyorum ama işe yaradı. Dosyayı terminalden nano ile düzenledikten sonra git onu değiştirilmiş olarak tanıdı ve ekleyip teslim edebildim.


Bunun için bir çözüm buldunuz mu? Herhangi bir birleştirme aracını kullandığımda değiştirilen dosyalarımı tanımayan git'imle mücadele ediyorum ve değişiklikleri görmenin tek yolu, birleştirmelerim için nano kullanmaktır, bu çok daha fazla zaman alır. Çakışan dosyalar başlangıçta git tarafından görülebilir, birleştirme aracı tarafından düzenlendikten sonra git üzerinde "değişmemiş" olarak görünürler.
Lucas P.

bunun neden işe yaradığını ve nasıl çalıştığını bilmiyorum ama benim için çalışıyor teşekkürler
Amit Bisht

0

Burada da aynı sorunu yaşıyorum VS2015 js dosyalarımdaki değişiklikleri tanımadı, uzaktan kumandaları depo ayarlarından kaldırıp ardından uzak URL yolunu yeniden eklemek sorunumu çözdü.


0

Vi editörü ile sunucuda bir yama dosyası oluşturduğumda benzer bir sorun yaşadım. Görünüşe göre sorun boşlukla ilgili. Yamayı yerelden ittiğimde dağıtım uygun oldu.


-1

Bu sorunu yaşadım. Benimki çalışmıyordu çünkü dosyalarımı projemin içindeki .git klasörüne koyuyordum.


-2

Benim durumumda, git reset --hardsilinmiş bir dosya yapmak ve bazı boş klasörler bıraktı. İçeriği inceledikten sonra dizinlerin boş olduğunu fark ettim.

Ancak git boş klasörleri yok sayar. (Düzeltme, git içeriği izlediği için tüm dizinleri yok sayar, boş klasörler içerik değildir.)


-4

git add * o zaman kullanmayı denegit commit


1
SO'ya hoş geldiniz! Bu muhtemelen soruyu cevaplamıyor ve burada zaten 9 cevap var. Lütfen çabalarınızı yanıtlanması gereken sorulara çevirin!
Cris Luengo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.