2010-08-26 15 views
12

Próbuję zastosować poprawkę Git utworzoną przez kogoś innego z git-format-patch. Poprawka została nałożona na jeden commit za HEAD, ale jak rozumiem, nie powinno to mieć znaczenia. Kiedy uruchamiam git am 0001.patch, pojawia się błąd:Co zrobić, jeśli git-am kończy się niepowodzeniem z "nie pasuje do indeksu"?

error: source.c: does not match index

nie jestem zbyt obeznany z formatem plastrów git, ale wydaje się, że indeksy nie zgadzają się jednak źródłem pasuje.

Jaki jest najlepszy sposób, aby to naprawić? Ręcznie zmienić indeksy, aby pasowały? Czy powinienem git-apply, a następnie skopiować informacje o autorze i opisie po zatwierdzeniu?

Odpowiedz

11

Od J.C. Hamano (Git maintainer) himself, to jest o:

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.

Dzięki najnowszej wersji Git, można przerwać:

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

Następnie:

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 

Uwaga: jedno źródło brudnej drzewa może być ustawienie autocrlf (jak w tym msysgit issue 81), więc upewnij sure to set that to false.
Inne źródło niezgodności: core.whitespace setting.


PO wymienia w komentarzu:

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 '.

Uwaga: W ostatnim 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

Dzięki za odpowiedź. Przed próbą uruchomienia' git am' zrobiłem uruchom 'git stash', więc nie sądzę, że był problem. Co skończyło się robi biegł' git am -3 patch.patch', następnie ręcznie naprawiając problem, a następnie uruchamiając 'git am --resolved'. – joshdoe

+0

@joshdoe: dziękuję za informację zwrotną .. Włączyłem ją do odpowiedzi – VonC

1

dla mnie jestem na starszymi wersjami git (CentOS-6 distro).

udało mi się rozwiązać ten problem, wykonując:

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

aby przeczytać więcej o tym, dlaczego to działa. sprawdź the original source here:

"

Jestem rodzaj zaskoczony, że nie zrobiliśmy do«odświeżenia raz góry» i już nikt nigdy nie napotkasz ten w ciągu ostatnich 5 lat Wydaje się, że odziedziczyłem to. zachowanie z git-applymbox ;-)

Rozsądne jest odświeżenie raz na samym początku, a także po ponownym uruchomieniu z "jestem - naprawiony".

"

+0

Próbowałem do góry głosowałem odpowiedź ale didn działa dla mnie. Polecenie git update-index --refresh 'zrobiło dla mnie jakąś sztuczkę. – mask

Powiązane problemy