Nach dem git reset --hard
, git status
gibt mir in den Dateien Changes not staged for commit:
Abschnitt.
Ich habe es auch versucht git reset .
, git checkout -- .
und git checkout-index -f -a
ohne Erfolg.
Wie kann ich diese nicht bereitgestellten Änderungen entfernen?
Dies scheint nur Visual Studio-Projektdateien zu treffen. Seltsam. Siehe diese Paste: http://pastebin.com/eFZwPn9Z . Das Besondere an diesen Dateien ist, dass ich in .gitattributes Folgendes habe:
*.sln eol=crlf
*.vcproj eol=crlf
*.vcxproj* eol=crlf
Auch autocrlf
ist in meinem globalen auf false gesetzt .gitconfig
. Könnte das irgendwie relevant sein?
.
steht für aktuelles Verzeichnis nicht Stammverzeichnisgit
Version? Entweder machen Sie einen dummen Fehler oder Sie haben eine alte Version, die fehlerhaft ist?Antworten:
Ich hatte das gleiche Problem und es hing mit der
.gitattributes
Datei zusammen. Der Dateityp, der das Problem verursacht hat, wurde jedoch nicht in der Datei angegeben.gitattributes
.Ich konnte das Problem durch einfaches Ausführen lösen
quelle
git rm .gitattributes
entfernt .gitattributes aus dem Index.git add -A
alles addiert (einschließlich der Beseitigung von .gitattributes) mit dem Index, der sollte dann nur die Entfernung von .gitattributes sein, wenn das wirklich das Problem ist.git reset --hard
Setzt alle nicht festgeschriebenen Änderungen zurück, einschließlich des Entfernens von .gitattributes. Im Wesentlichen werden dabei .gitattributes (und die* text=auto
Direktive) für ein Commit ignoriert , indem es gelöscht und dann der Index zurückgesetzt wird, während er gelöscht wird. Daher wird er zurückgesetzt, aber nachdem Sie die anderen Dateien bereits zurückgesetzt haben, wurden sie nicht erneut geändert..gitattributes
: "fatal: pathspec '.gitattributes' stimmte nicht mit Dateienfatal: pathspec '.gitattributes' did not match any files
. Was mache ich falsch?AUFGELÖST!!!
Ich habe dieses Problem mit den folgenden Schritten behoben
1) Entfernen Sie jede Datei aus dem Git-Index.
2) Schreiben Sie den Git-Index neu, um alle neuen Zeilenenden aufzunehmen.
Die Lösung war Teil der Schritte, die auf der Git-Site https://help.github.com/articles/dealing-with-line-endings/ beschrieben wurden.
quelle
Git setzt keine Dateien zurück, die sich nicht im Repository befinden. Also kannst du:
Dadurch werden alle Änderungen vorgenommen, wodurch Git auf diese Dateien aufmerksam wird, und sie dann zurückgesetzt.
Wenn dies nicht funktioniert, können Sie versuchen, Ihre Änderungen zu speichern und zu löschen:
quelle
git reset --hard
, " sowohl den Staging-Bereich als auch das Arbeitsverzeichnis entsprechend zurückzusetzen "? Wenn eine Datei nicht bereitgestellt wird, möchten wir sie natürlich entfernen, wenn wir dies tunreset --hard
.Wenn Sie Git für Windows verwenden, ist dies wahrscheinlich Ihr Problem
Ich hatte das gleiche Problem und Versteck, Hard Reset, Clean oder sogar alle hinterließen immer noch Änderungen. Was sich als Problem herausstellte, war der x-Dateimodus, der von git nicht richtig eingestellt wurde. Dies ist ein "bekanntes Problem" mit Git für Windows. Die lokalen Änderungen werden im Git- und Git-Status als alter Modus 100755, neuer Modus 100644 ohne tatsächliche Dateidifferenzen angezeigt.
Das Update besteht darin, den Dateimodus zu ignorieren:
Mehr Infos hier
quelle
rm -rf *; git checkout HEAD .
nicht. Puh!Okay, ich habe das Problem irgendwie gelöst.
Es schien, dass die
.gitattributes
Datei, die enthält:Die Projektdateien wurden nicht bereitgestellt angezeigt. Ich habe keine Ahnung, warum das so ist, und ich hoffe wirklich, dass jemand, der mit den Wegen des Gits vertraut ist, uns eine nette Erklärung gibt.
Mein Fix war, diese Dateien zu entfernen und
autocrlf = false
unter[core]
in hinzuzufügen.git/config
.Dies entspricht nicht genau der vorherigen Konfiguration, da dies von jedem Entwickler verlangt wird
autocrlf = false
. Ich würde gerne eine bessere Lösung finden.BEARBEITEN:
Ich habe die belastenden Zeilen kommentiert, sie auskommentiert und es hat funktioniert. Was zum ... ich nicht einmal ...!
quelle
autocrlf = false
. Ich habe Änderungen von Upstream-SVN-Repo (git svn fetch
/git merge git-svn
) zusammengeführt und 1 Datei als geändert markiert. Das Seltsame ist, dass ich dieses Problem schon einmal hatte und alles, was ich tun musste, war, einen anderen Zweig (mit der-f
Flagge) zu überprüfen und dann zurückzuschalten. Ich habe das getan und es hat funktioniert, aber als ich zu einem Feature-Zweig wechselte, war die "Änderung" zurück! Ihre Bearbeitung am Ende der Antwort war die Lösung. In meinem Fall habe ich eine Zeile oben in meiner .gitattributes-Datei kommentiert / kommentiert:* text=auto !eol
.gitattributes
, führen Sie sie ausgit status
, kommentieren Sie sie aus.gitattributes
, führen Sie siegit status
erneut aus.gitattributes
erneut anwendet . Dasgit diff
zeigt wahrscheinlich die berühmte Wand aus Rot / Wand aus Grün , die typisch für Unterschiede am Zeilenende ist.Mögliche Ursache Nr. 1 - Normalisierung des Zeilenendes
Eine Situation, in der dies passieren kann, besteht darin, dass die betreffende Datei ohne die richtige Konfiguration für Zeilenenden (1) in das Repository eingecheckt wurde, was zu einer Datei im Repository mit den falschen Zeilenenden oder gemischten Zeilenenden führt. Stellen Sie zur Bestätigung
git diff
sicher , dass nur Änderungen an den Zeilenenden angezeigt werden (diese sind möglicherweise standardmäßig nicht sichtbar. Versuchen Siegit diff | cat -v
, die Zeilenumbrüche als Literal anzuzeigen^M
anzuzeigen).Anschließend hat wahrscheinlich jemand eine hinzugefügt
.gitattributes
oder diecore.autocrlf
Einstellung geändert , um die Zeilenenden zu normalisieren (2). Basierend auf der.gitattributes
oder globalen Konfiguration hat Git lokale Änderungen an Ihrer Arbeitskopie vorgenommen, die die angeforderte Normalisierung am Zeilenende anwenden. Leider aus irgendeinem Grundgit reset --hard
diese Änderungen der Leitungsnormalisierung nicht rückgängig gemacht.Lösung
Problemumgehungen, bei denen die lokalen Leitungsenden zurückgesetzt werden, lösen das Problem nicht. Jedes Mal, wenn die Datei von git "gesehen" wird, wird versucht, die Normalisierung erneut anzuwenden, was zu demselben Problem führt.
Die beste Option ist, Git die gewünschte Normalisierung anwenden zu lassen, indem alle Zeilenenden im Repo normalisiert werden
.gitattributes
und diese Änderungen vorgenommen werden - siehe Versuchen, Zeilenenden mit Git-Filter-Zweig zu korrigieren, aber kein Glück haben .Wenn Sie wirklich versuchen möchten, die Änderungen an der Datei manuell zurückzusetzen, scheint die einfachste Lösung darin zu bestehen, die geänderten Dateien zu löschen und dann git anzuweisen, sie wiederherzustellen, obwohl ich feststelle, dass diese Lösung nicht zu 100% konsistent zu funktionieren scheint die Zeit ( WARNUNG: Führen Sie dies NICHT aus, wenn Ihre geänderten Dateien andere Änderungen als Zeilenenden aufweisen !!):
Beachten Sie, dass dieses Problem weiterhin auftritt, sofern Sie die Zeilenenden im Repository nicht irgendwann normalisieren.
Mögliche Ursache Nr. 2 - Groß- und Kleinschreibung
Die zweite mögliche Ursache ist die Groß- und Kleinschreibung unter Windows oder Mac OS / X. Angenommen, im Repository ist ein Pfad wie der folgende vorhanden:
/foo/bar
Jetzt schreibt jemand unter Linux Dateien fest
/foo/Bar
(wahrscheinlich aufgrund eines Build-Tools oder etwas, das dieses Verzeichnis erstellt hat) und pusht. Unter Linux sind dies jetzt zwei separate Verzeichnisse:Das Auschecken dieses Repos unter Windows oder Mac kann zu Änderungen führen
fileA
, die nicht zurückgesetzt werden können, da bei jedem Zurücksetzen git unter Windows auscheckt/foo/bar/fileA
und Windows den Inhalt vonfileA
with überschreibt, da bei Groß- und Kleinschreibung nicht berücksichtigt wird/foo/Bar/fileA
, was dazu führt, dass sie "geändert" werden.Ein anderer Fall kann eine einzelne Datei sein, die im Repo vorhanden ist und die sich beim Auschecken in einem Dateisystem ohne Berücksichtigung der Groß- und Kleinschreibung überlappen würde. Beispielsweise:
Es kann andere ähnliche Situationen geben, die solche Probleme verursachen können.
git on case-unempfindliche Dateisysteme sollten diese Situation wirklich erkennen und eine nützliche Warnmeldung anzeigen, dies ist jedoch derzeit nicht der Fall (dies kann sich in Zukunft ändern - siehe diese Diskussion und die zugehörigen vorgeschlagenen Patches auf der git.git-Mailingliste).
Lösung
Die Lösung besteht darin, den Fall von Dateien im Git-Index und den Fall im Windows-Dateisystem in Einklang zu bringen. Dies kann entweder unter Linux erfolgen, das den tatsächlichen Stand der Dinge anzeigt, oder unter Windows mit dem sehr nützlichen Open-Source-Dienstprogramm Git-Unite . Git-Unite wendet die erforderlichen Falländerungen auf den Git-Index an, der dann in das Repo übernommen werden kann.
(1) Das war wahrscheinlich von jemandem mit Windows, ohne
.gitattributes
Definition für die betreffende Datei, und mit dem Standard globale Einstellung fürcore.autocrlf
das istfalse
(siehe (2)).(2) http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/
quelle
Wenn andere Antworten nicht funktionieren, versuchen Sie, die Dateien hinzuzufügen, und setzen Sie sie zurück
In meinem Fall half dies, wenn es eine Reihe leerer Dateien gab, die git verfolgte.
quelle
$ git add .
anstelle von$ git add -A
Eine weitere Ursache hierfür können Dateisysteme sein, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird . Wenn Sie mehrere Ordner in Ihrem Repo auf derselben Ebene haben, deren Namen sich nur von Fall zu Fall unterscheiden, werden Sie davon betroffen sein. Durchsuchen Sie das Quell-Repository über die Weboberfläche (z. B. GitHub oder VSTS), um dies sicherzustellen.
Weitere Informationen: https://stackoverflow.com/a/2016426/67824
quelle
git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d
Sie können
stash
Ihre Änderungen entfernen und dann den Vorrat ablegen:quelle
Keine dieser Methoden hat bei mir funktioniert. Die einzige Lösung bestand darin, das gesamte Repo zu zerstören und es erneut zu klonen. Dies beinhaltet das Verstauen, Zurücksetzen, Hinzufügen und Zurücksetzen, CLRF-Einstellungen, Groß- und Kleinschreibung usw. Seufz ..
quelle
Führen Sie den Befehl clean aus :
quelle
.gitattributes
Datei- und Zeilenenden waren kein Problem, da ich auf einer Linux-Box bin und alle Entwickler und unser Server Linux sind.Überprüfen Sie Ihre
.gitattributes
.In meinem Fall habe ich
*.js text eol=lf
drin und git Optioncore.autocrlf
wartrue
.Es bringt mich zu der Situation, in der git die Zeilenenden meiner Dateien
git reset --hard HEAD
automatisch konvertiert und mich daran hindert, das Problem zu beheben, und sogar nichts unternommen hat.Ich behebe es mit Kommentaren
*.js text eol=lf
in meinem.gitattributes
und kommentiere es danach aus.Sieht so aus, als wäre es nur Magie.
quelle
*.bat text eol=crlf
zu aktualisieren .Ich bin auf ein ähnliches Problem gestoßen
.gitattributes
, das auch GitHubs LFS betraf. Dies ist zwar nicht genau das Szenario des OP, bietet jedoch meiner Meinung nach die Möglichkeit zu veranschaulichen, was die.gitattributes
Datei tut und warum sie zu nicht bereitgestellten Änderungen in Form von "Phantom" -Differenzen führen kann.In meinem Fall befand sich eine Datei bereits seit Beginn der Zeit in meinem Repository. In einem kürzlich durchgeführten Commit habe ich eine neue
git-lfs track
Regel hinzugefügt, die ein Muster verwendet, das im Nachhinein etwas zu breit war und am Ende mit dieser alten Datei übereinstimmt. Ich weiß, dass ich diese Datei nicht ändern wollte. Ich weiß, dass ich die Datei nicht geändert habe, aber jetzt war es in meinen nicht bereitgestellten Änderungen und keine Anzahl von Checkouts oder Hard-Resets für diese Datei würde es beheben. Warum?Die GitHub LFS-Erweiterung funktioniert hauptsächlich durch die Nutzung der Hooks,
git
die den Zugriff über die.gitattributes
Datei ermöglichen. Im Allgemeinen geben Einträge in an.gitattributes
, wie übereinstimmende Dateien verarbeitet werden sollen. Im Fall des OP ging es um die Normalisierung der Zeilenenden; In meinem Fall ging es darum, ob LFS den Dateispeicher übernehmen soll. In beiden Fällen stimmt die tatsächliche Datei,git
die beim Berechnen von agit diff
angezeigt wird, nicht mit der Datei überein, die beim Überprüfen der Datei angezeigt wird. Wenn Sie also ändern, wie eine Datei über das entsprechende.gitattributes
Muster verarbeitet wird, werden sie als nicht bereitgestellte Änderungen im Statusbericht angezeigt, auch wenn die Datei tatsächlich nicht geändert wurde.Alles, was gesagt wurde, meine "Antwort" auf die Frage ist, dass wenn die Änderung in der
.gitattributes
Datei etwas ist, das Sie tun wollten, Sie wirklich nur die Änderungen hinzufügen und weitermachen sollten. Wenn nicht, ändern Sie die.gitattributes
um besser darzustellen, was Sie tun möchten.Verweise
GitHub LFS-Spezifikation - Hervorragende Beschreibung, wie sie sich in die Funktionsaufrufe
clean
undsmudge
einbinden, um Ihre Datei in dengit
Objekten durch eine einfache Textdatei mit einem Hash zu ersetzen .gitattributes-Dokumentation - Alle Details zu den verfügbaren Informationen zum Anpassen der
git
Verarbeitung Ihrer Dokumente.quelle
Ich hatte das gleiche Problem. Ich tat es
git reset --hard HEAD
aber immer noch jedes Malgit status
sah ich einige Dateien als geändert.Meine Lösung war relativ einfach. Ich habe gerade meine IDE geschlossen (hier war es Xcode) und meine Befehlszeile geschlossen (hier war es Terminal unter meinem Mac OS) und es erneut versucht und es hat funktioniert.
Dennoch konnte ich nie herausfinden, was das Problem verursacht hat.
quelle
Ich glaube, dass es ein Problem mit git für Windows gibt, bei dem git beim Auschecken zufällig die falschen Zeilenenden schreibt und die einzige Problemumgehung darin besteht, einen anderen Zweig auszuchecken und git zu zwingen, Änderungen zu ignorieren. Überprüfen Sie dann den Zweig, an dem Sie tatsächlich arbeiten möchten.
Beachten Sie, dass dadurch alle Änderungen verworfen werden, die Sie möglicherweise absichtlich vorgenommen haben. Tun Sie dies daher nur, wenn Sie dieses Problem unmittelbar nach dem Auschecken haben.
Edit: Ich hätte vielleicht beim ersten Mal tatsächlich Glück gehabt. Es stellt sich heraus, dass ich nach dem Zweigwechsel wieder etwas gebissen habe. Es stellte sich heraus, dass die Dateien git als geändert gemeldet wurden, nachdem sich das Ändern von Zweigen geändert hatte. (Anscheinend, weil git die CRLF-Zeilenende nicht konsequent auf Dateien angewendet hat.)
Ich habe auf das neueste Git für Windows aktualisiert und hoffe, dass das Problem behoben ist.
quelle
Ähnliches Problem, obwohl ich sicher nur an der Oberfläche bin. Auf jeden Fall kann es jemandem helfen: Was ich getan habe (FWIW, in SourceTree): Die nicht festgeschriebene Datei versteckt und dann einen Hard-Reset durchgeführt.
quelle
Wie andere Antworten gezeigt haben, liegt das Problem an der automatischen Korrektur am Zeilenende. Ich habe dieses Problem mit * .svg-Dateien festgestellt. Ich habe in meinem Projekt eine SVG-Datei für Symbole verwendet.
Um dieses Problem zu lösen, habe ich git darüber informiert, dass SVG-Dateien anstelle von Text als binär behandelt werden sollen, indem ich die folgende Zeile zu .gitattributes hinzufüge
* .svg binär
quelle
In einer ähnlichen Situation. Infolge langjähriger Qualen mit vielen Programmierern, die in der Lage waren, verschiedene Kodierungen der Zeilenenden zu stopfen (. Asp , Js, Css ... nicht das Wesen) in eine Datei. Vor einiger Zeit abgelehnt .gitattributes. Einstellungen für Repo links
autorclf = true
undsafecrlf = warn
.Das letzte Problem trat bei der Synchronisierung aus dem Archiv mit verschiedenen Zeilenenden auf. Nach dem Kopieren aus dem Archiv werden im Git-Status viele Dateien mit der Notiz geändert
The line will have its original line endings in your working directory. warning: LF will be replaced by CRLF in ...
Tipps von Wie normalisiere ich funktionierende Baumzeilenenden in Git? geholfen
git add -u
quelle
Eine andere Möglichkeit, auf die ich gestoßen bin, war, dass eines der Pakete im Repository einen getrennten HEAD hatte. Wenn keine der Antworten hier hilft und Sie auf eine solche Git-Statusmeldung stoßen, haben Sie möglicherweise das gleiche Problem:
Wenn Sie in den
path/to/package
Ordner a gehen,git status
erhalten Sie das folgende Ergebnis:Der folgende Befehl sollte dann das Problem beheben, das
master
durch Ihre lokale Niederlassung ersetzt werden sollte:Und Sie erhalten eine Nachricht, dass Ihre lokale Niederlassung einige Commits hinter der Remote-Niederlassung enthält.
git pull
und du solltest aus dem Wald sein!quelle
Aus irgendeinem Grund
git add .
hat nicht funktioniert , aber
$ git add -A
hat geklappt!
quelle