2010-12-14 6 views
11
zurücksetzen

Ich habe eine geänderte Datei, die ich auf das, was in der letzten Commit ist, aber es ist "stecken geblieben" wird immer als geändert markiert werden.Ich kann eine Datei nicht auf einen bestimmten Commit mit Git

$ 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: index.php 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Ich versuche dann:

$git checkout -- index.php 

Aber die Ausgabe von Status git ist immer noch die gleichen. Ich versuche es dann:

$git reset --hard master 
HEAD is now at 02c9613 test commit message 

Und die Ausgabe von Git-Status ist immer noch gleich.

Irgendwelche Ideen, wie ich die angeblichen Änderungen an dieser Akte loswerden kann?

+0

Welche Änderungen gibt es? – Cascabel

+2

Was ist das Ergebnis von 'git diff'. Es riecht nach http://stackoverflow.com/search?q=[git]+autocrlf. – Rudi

+0

Das Diff zeigt hauptsächlich Zeilenendeänderungen an. Beachten Sie, dass ich diese Datei überhaupt nicht geändert habe. Dies kam von einem neuen Mitglied des Teams. Ich schaue mir Rudis Link an. – Julian

Antwort

3

Sie könnten in eine whitespace issue versuchen git config --global apply.whitespace nowarn dafür.

Wenn das nicht funktioniert, würde ich sagen, Sie sind in einen Fehler geraten. Speichern Sie den lokalen Klon für zukünftige Referenz (ich hoffe, es ist nicht zu groß) und erstellen Sie einen Fehlerbericht. Vor allem die Tatsache, dass:

  • Sie die Datei nicht geändert haben sich
  • andere Dateien dieses Problem nicht zeigen

Zeichen sind, dass es vielleicht einfach nicht sein, dass Sie den Fehler gemacht hier . Ob Sie das Problem bei einem sauberen Repo reproduzieren können, wäre auch eine interessante Information.

+0

Klonte das Repo wieder und es funktioniert gut. Der Fehler im neuen Repo scheint jedoch nicht reproduziert zu werden. Leider ist der Code hier nicht Open Source, also kann ich ihn nicht wirklich in einem Fehlerbericht einreichen :( – Julian

3

Sie müssen index.php aus dem "Index" entfernen. Dann kannst du eine andere Version auschecken.

git rm --cached index.php 

Sollte der Trick tun. Siehe:

http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

+1

Julians 'git status' Ausgabe zeigt nichts an, als ob sie zum Index hinzugefügt würde. – jamessan

+0

Mike, wenn ich den Befehl git rm ausführe, möchte ich, dass ich die Änderungen beginne, was merkwürdig erscheint, da ich nichts mit dieser Datei zu tun haben will; Ich möchte nur, dass es genau so ist, wie es in GitHub aussieht. – Julian

1

Haben Sie versucht:

$ git checkout master -f -- index.php 

oder

$ git checkout master -f 

?

Ich kann nicht sehen, warum das funktionieren würde, wenn reset nicht, aber es ist einen Versuch wert.

+0

Gauthier, der erste Befehl, den du erwähnt hast, hatte keine Wirkung. Aber die zweite hat etwas sehr Interessantes getan. Während es zunächst nichts getan hat, habe ich beschlossen, eine andere Datei zu modifizieren, und Git Status markiert es als geändert. Nachdem ich Ihren zweiten Vorschlag gemacht hatte, ging meine modifizierte Datei in den ursprünglichen Zustand zurück, während die index.php unverändert blieb! Ich bin sehr nahe daran, das Repo erneut vom Ursprung zu klonen. – Julian

+0

Ich würde empfehlen, 'git diff 'wie oben vorgeschlagen auszuführen. – Gauthier

+1

"git checkout master -f" hat mir geholfen! Danke, –

0

FWIW, ich konnte das Problem beheben, indem ich die .git-Unterverzeichnisse in den Verzeichnissen entfernte, die geändert wurden. Sobald die .git-Unterverzeichnisse (da die Unterverzeichnisse .git-Projekte in und von sich selbst waren) weg waren, wurden die übergeordneten Ordner nicht mehr geändert. Wenn sich die fraglichen Dateien im selben Ordner wie ein nicht verwandter .git-Ordner befinden, hat dies möglicherweise auch Auswirkungen.

1

versuchen git ls-files -m | xargs -i git update-index --assume-unchanged "{}"

+0

Sei vorsichtig, du musst das Flag entfernen, um die Änderungen mit '--no-asimone-unverändert' zu sehen – d4Rk

0

ich in der ziemlich gleichen Schlamassel steckte. Ich hatte einige Dateien, die ich einfach nicht loswerden konnte in git status. Nachdem ich versucht habe, die Dateien auf irgendeine Art und Weise zurückzusetzen oder zu überprüfen, habe ich beschlossen, die problematischen Dateien hinzuzufügen und sie zu übernehmen. Git schien damit zufrieden zu sein. Ich ging dann zum vorherigen Commit zurück und das Problem wurde gelöst, die problematischen Dateien waren tatsächlich verschwunden.

Es erklärt nicht den Fehler, aber wenn diese Lösung es lösen kann, ist aleady eine gute Sache.