2010-06-11 5 views
229

Ich habe folgenden Arbeitsbaum ZustandGit: kann nicht auf lokale Änderungen rückgängig zu machen (Fehler: Pfad ... ist unmerged)

$ git status foo/bar.txt 
# On branch master 
# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# 
#  deleted by us:  foo/bar.txt 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Datei foo/bar.txt da ist und ich möchte es den „unveränderten Zustand“ erhalten wieder (ähnlich 'svn revert'):

$ git checkout HEAD foo/bar.txt 
error: path 'foo/bar.txt' is unmerged 
$ git reset HEAD foo/bar.txt 
Unstaged changes after reset: 
M  foo/bar.txt 

Nun ist es verwirrend erhalten:

$ git status foo/bar.txt 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  new file: foo/bar.txt 
# 
# 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: foo/bar.txt 
# 

die gleiche Datei in beiden Abschnitten, ne w und modifiziert? Was soll ich machen?

+1

Ich wünschte, jemand könnte erklären, wie wir in diese Situation kommen, * warum * es passiert, und warum die Lösung funktioniert. –

Antwort

389

Sie haben es falsch herum gemacht. Sie sollen zuerst zurücksetzen, die Datei aufheben und dann auschecken, um lokale Änderungen rückgängig zu machen.

Try this:

$ git reset foo/bar.txt 
$ git checkout foo/bar.txt 
+0

Danke; Lief wie am Schnürchen! Ich musste mich verpflichten (_not_ mit dem -a arg, die relevanten Änderungen waren bereits in Szene gesetzt) ​​und dann konnte ich wie gewohnt pushen/ziehen. – Patrick

+15

Für mich es erforderlich a:
$ git reset - foo/bar.txt
$ git checkout - foo/bar.txt
(Beachten Sie die zusätzlichen "-" dazwischen) – Jan

+0

Für mich, Git zurückgesetzt setzt * alle zurück * Dateien, nicht nur die aufgelisteten. Habe ich etwas falsch gemacht? – Zds

-3
git checkout foo/bar.txt 

haben Sie das versucht? (ohne ein Schlüsselwort HEAD)

Normalerweise ändere ich meine Änderungen auf diese Weise.

+0

Typischer Fehler beim Versuch einer 'Kasse' inmitten einer Zusammenführung: ' $ git co Pfad/zu/Datei' = Ergebnis => 'Fehler: Pfad 'Pfad/zu/Datei' wird nicht zusammengeführt ' => so , erster Lauf: '$ git reset path/to/file', und dann sollte' git checkout path/to/file' funktionieren. – michael

+0

Wenn Sie HEAD nicht angeben, wird der Git-Checkout aus dem Index ausgecheckt, was eine schwächere Operation ist (die Inhaltsquelle ist der Index anstelle von HEAD). Außerdem denke ich, dass das in diesem Fall überhaupt keinen Unterschied macht - mit dem spezifischen Problem, das die Frage stellte. Hast du das versucht? – Kissaki

-4

I git stash sehr nützlich für die zeitliche Abwicklung aller 'schmutzigen' Zustände finden.

+4

Stash funktioniert nicht, wenn Sie nicht zusammengeführte Änderungen haben – Rob

+3

Wenn Sie es nützlich finden, geben Sie bitte eine Erklärung, wie es in diesem konkreten Fall helfen würde. Wie würdest du es hier benutzen? – Kissaki

9

// Hinweis Punkt (.) Am Ende. Und alle

21

Das funktionierte perfekt für mich gut sein wird:

$ git reset -- foo/bar.txt 
$ git checkout foo/bar.txt