2010-08-26 3 views
12

Ich versuche, einen Git-Patch von jemand anderem mit git-format-patch erstellt. Der Patch wurde gegen einen Commit hinter HEAD erstellt, aber wie ich es verstehe, sollte dies keine Rolle spielen. Als ich git am 0001.patch laufen, ich den Fehler:Was ist zu tun, wenn git-am mit "stimmt nicht mit Index überein?"

error: source.c: does not match index

ich mit dem Format von git Patches nicht allzu vertraut bin, aber es scheint, dass der Indizes nicht übereinstimmen, jedoch funktioniert die Quellanpassungs-.

Was ist der beste Weg, um das zu beheben? Manuell die Indizes ändern, um übereinzustimmen? Oder sollte ich git-apply kopieren und dann die Autor- und Beschreibungsinformationen kopieren, wenn ich festlege?

Antwort

11

Von J.C. Hamano (Git maintainer) himself, das ist ungefähr:

patch applications and merges in a dirty work tree with a clean index.

  • A dirty work tree is where you have changes that are not added to the index.
    A work tree that is not dirty is a clean work tree.
  • A dirty index is where you have changes already added to it (in other words, " git diff --cached " will report some changes).
    A clean index matches the HEAD.

Mit den jüngsten Git Version können Sie abbrechen:

To restore the original branch and stop patching run " git am --abort ".

Dann:

The simplest thing for those who cannot decide may be to stash the changes away for later.

$ git stash save "Random changes that are not ready" 

And then redo " git pull " or " git am ".
" git stash " is the ultimate tool for people who are afraid of commitment.

After redoing " git pull " or " git am ", you can replay the local changes you stashed away:

$ git stash pop 

Hinweis: eine Quelle von schmutzigem Baum kann die autocrlf Einstellung sein (wie in diesen msysgit issue 81), so sure to set that to false machen.
Andere Quelle der Diskrepanz: core.whitespace setting.


Die OP erwähnt im Kommentar:

Before trying to run git am I did run git stash , so I don't think that was the problem.
What I ended up doing was running git am -3 patch.patch, then manually fixing the problem, then running ' git am --resolved '.

Hinweis: in der jüngsten Git1.7.2 Release Notes:

The message from " git am -3 " has been improved when conflict resolution ended up making the patch a no-op.

+0

Vielen Dank für die Antwort. Bevor Sie versuchen,' git zu laufen am' I 'git stash' laufen hätte, so dass ich glaube nicht, das war das Problem. Was ich lief am Ende tun' git am -3 Patch.Patch ', dann manuell das Problem zu beheben, dann läuft 'Git am --Resolved'. – joshdoe

+0

@joshdoe: Vielen Dank für das Feedback.Ich habe es in der Antwort enthalten .. – VonC

1

für mich, ich bin auf einem älteren Versionen von git (CentOS-6 Distro).

konnte ich das Problem beheben, indem Sie:

  • git update-index --refresh
  • git am ${patch_filename}

mehr auf lesen, warum das funktioniert. Bitte überprüfen the original source here:

"

Ich bin ein bisschen überrascht, dass wir nicht die‚refresh einmal im Voraus‘ bereits und niemand jemals läuft in dieser für die letzten 5 Jahre getan haben Es scheint, dass ich geerbt, dass. Verhalten von git-applymbox ;-)

Es ist sinnvoll, einmal am Anfang und auch beim Neustart mit "am --resolved" zu aktualisieren.

"

+0

Ich habe versucht, Antwort gewählt, aber didn 't Arbeit für mich.' git update-index --refresh 'Befehl machte einen Trick für mich. – mask

Verwandte Themen