Ich versuche, git add --interactive
einige Änderungen selektiv zu meinem Index hinzuzufügen, erhalte jedoch ständig die Meldung "Ihr bearbeiteter Teil gilt nicht. Erneut bearbeiten ...". Ich erhalte diese Meldung auch dann, wenn ich die Option e wähle und meinen Editor sofort speichere / schließe. Mit anderen Worten, ohne das Stück überhaupt zu bearbeiten, gilt der Patch nicht.
Hier ist das genaue Beispiel, das ich verwende (ich versuche, eine kleine Demo zusammenzustellen):
Originaldatei:
first change
second change off branch
third change off branch
second change
third change
fourth change
Neue Datei:
Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
bug fix 1
change supporting feature 1
Ich versuche zu zeigen, wie man verwendet, git add --interactive
um nur die Zeile "Bugfix 1" zum Index hinzuzufügen. Wenn ich das interaktive Hinzufügen der Datei ausführe, wähle ich den Patch-Modus. Es präsentiert mich mit
diff --git a/newfile b/newfile
index 6d501a3..8b81ae9 100644
--- a/newfile
+++ b/newfile
@@ -1,6 +1,9 @@
+Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
+bug fix 1
+change supporting feature 1
Ich antworte mit Split, gefolgt von "Nein", um das erste Stück anzuwenden. Das zweite Stück versuche ich zu bearbeiten. Ich habe ursprünglich versucht, das Endergebnis zu löschen - das hat nicht funktioniert. Das Stück ganz alleine zu lassen, funktioniert auch nicht, und ich kann nicht herausfinden, warum.
quelle
-
Zeilen am Anfang von Zeilen hinzufügen , die in der Datei zunächst nicht vorhanden sind. Es ist ein Unterschied und kann keine Zeilen löschen, die noch nicht vorhanden sind. Also, wenn eine Zeile im Diff mit beginnt+
und Sie sie in-
Git ändern, geht WTF? weil jetzt die zum Entfernen markierte Zeile zunächst nicht vorhanden ist (stattdessen wurde diese Zeile zum Hinzufügen markiert, und wenn eine zum Hinzufügen markierte Zeile zum Entfernen markiert ist, kann git eine Zeile nicht entfernen, die noch nicht in der Datei enthalten ist). .Antworten:
In diesem Beispiel müssen Sie die Zeilennummern im Hunk anpassen. Ändern Sie die Zeile:
so dass es stattdessen lautet:
quelle
Ist das wie in diesem Git-Add-Beitrag ?
Siehe auch dieses Commit für git add -p .
Ortomala Lokni ‚s Antwort bezieht sich auf Joaquín Windmüller Blog - Eintrag‚ Selektiv select Änderungen mit git (oder Imma bearbeiten Ihr großes Stück) zu begehen ‘
Anstatt Zeilen zu zählen, möchte Git überlappende Hunks (wenn einer bearbeitet wird) zusammenführen, bevor der bearbeitete Hunk angewendet wird.
Das wurde Mitte 2018 besprochen und würde Szenarien wie: vermeiden.
quelle
- foo
in `` wechseln (nur ein Leerzeichen, nicht "ein Leerzeichen und die gesamte Zeile"). Ich habe eine Weile gebraucht, um zu verstehen, dass es "foo" sein sollte.Natürlich bin ich zu spät dran, wollte aber trotzdem für die Aufzeichnung erwähnen, dass dieses Problem letztes Jahr auf der Git-Mailingliste diskutiert wurde und sich seitdem anscheinend nicht viel geändert hat.
Dieses spezielle Problem ergibt sich aus der Aufteilung und dem Versuch, dasselbe Stück zu bearbeiten. Die ursprünglich von Jeff King veröffentlichte Analyse des zugrunde liegenden Problems lautet im Wesentlichen:
Jeff schließt seinen Beitrag mit einer sehr pragmatischen Problemumgehung ab, die immer erfolgreich ist und daher dringend empfohlen wird:
Wenn Sie nur ein Stück bearbeiten, das zuvor nicht geteilt wurde, müssen Sie sich nicht mit den Zeilennummern befassen.
quelle
^M
in der Diff-Datei angezeigt wurden . Nachdem ich die Datei mit CR-Endungen gespeichert hatte, wurde der interaktive Bearbeitungs-Patch ausgeführt!Wenn Sie eine zum Löschen bereitgestellte Zeile nicht löschen möchten, wie in
Wenn Sie die zweite Zeile behalten möchten, stellen Sie sicher, dass Sie die
-
durch ein Leerzeichen ersetzen , anstatt die gesamte Zeile zu löschen (als würden Sie eine hinzugefügte Zeile entfernen). Git wird die Zeile als Kontext verwenden.quelle
Es ist wichtig, auch den Hunk-Header korrekt zu ändern (z
@@ -1,6 +1,9 @@
. B. ). Joaquin Windmuller enthüllt in einem seiner Blog- Beiträge das Geheimnis der Bearbeitung von Hunk-Headern .quelle
Ich habe kürzlich durch Lesen dieses Threads herausgefunden, wie man die manuelle Bearbeitung durchführt.
Der Trick, den ich benutzte, war, wenn ich einen Unterschied habe wie:
Der Trick besteht darin, die beiden Linien, die ich nicht möchte, vollständig zu entfernen, sodass der resultierende Unterschied wie folgt aussieht:
Während dies für die meisten Menschen höchstwahrscheinlich offensichtlich ist, war es bis heute nicht für mich und ich dachte, ich sollte nur meine Erfahrungen teilen. Bitte sagen Sie mir, ob für diese Methode eine Gefahr besteht.
quelle
+
in ein' '
zu verwandeln.Sie können die Zeilennummern manuell bearbeiten, was in einigen Fällen auf jeden Fall nützlich ist. Sie hätten dieses spezielle Problem jedoch wahrscheinlich vermeiden können, indem Sie das Stück NICHT zuerst aufgeteilt hätten.
Wenn Sie sehen, dass Sie wahrscheinlich etwas später in dem von Git automatisch ausgewählten Teil bearbeiten müssen, ist es am besten, nur den gesamten Teil zu bearbeiten, anstatt ihn zu teilen, die Hälfte zu inszenieren und dann die andere Hälfte zu bearbeiten. Git wird es besser machen, das herauszufinden.
quelle
Ich kam zu dieser Frage und suchte nach einer Lösung für dasselbe Problem. Ich konnte nicht herausfinden, wie ich die Zeilennummern (wie oben vorgeschlagen) im Hunk ändern sollte, damit Git sie in meinem Fall akzeptiert. Ich habe jedoch einen viel besseren Weg gefunden, dies zu tun
git gui
. Dort können Sie die Linien im Diff auswählen, die Sie inszenieren möchten, dann mit der rechten Maustaste klicken und "Linien aus Commit inszenieren" auswählen. Ich erinnere mich, dass Git-Cola auch die gleiche Funktionalität hat.quelle
git-cola
scheint unter Linux, Windows und MacOS zu funktionieren.Ein zusätzliches Problem, das ich hatte, als ich diesen Fehler bekam, war, dass sich die Zeilenenden änderten, als ich die Bearbeitungsdatei speicherte.
Ich habe Windows und Notepad für meine Änderungen verwendet (speichert nur mit Windows-Zeilenenden). Mein Code wurde mit Notepad ++ geschrieben und ich habe ihn so eingerichtet, dass er Zeilenenden im Unix / Linux-Stil hat.
Als ich meine Einstellungen so änderte, dass Notepad ++ als Standard-Git-Editor verwendet wurde, konnte ich meine Änderungen am Hunk vornehmen.
quelle
git config --global core.editor '"C:/Program\ Files\ \(x86\)/Notepad++/notepad++.exe"'
(Passen Sie dies an die Stelle an, an der Notepad ++ auf Ihrem PC installiert ist)Ein Grund für die seltsamen Meldungen "Ihr bearbeiteter Hunk wird nicht angewendet" (wahrscheinlich begleitet von etwas wie "Fehler: Patchfragment ohne Header in Zeile ...") könnte Ihr Editor sein, wenn er so konfiguriert ist, dass nachgestellte Leerzeichen entfernt werden. Dies würde offensichtlich große Probleme verursachen, da Patches leere Zeilen als Zeilen mit einem Leerzeichen codieren. Jeder Teil, der leere Zeilen enthält, würde nicht angewendet, wenn er mit einem solchen Editor gespeichert würde. Tatsächlich würde ein Teil, der unveränderte Leerzeilen enthält, nach der Bearbeitung nicht angewendet, wenn das Entfernen von nachgestellten Leerzeichen aktiviert ist.
quelle
Zu Ihrer Information, ich habe einen leicht zusammenhängenden Fehler erhalten ... als ich Patches gemäß der oben vorgeschlagenen Anweisung hinzufügte ... Es wurde jedoch kein Fehler angezeigt. Ich wurde wiederholt gebeten, das gleiche Stück zu inszenieren ... Ich bemerkte, dass ich eine ältere Version von Vim 7.4 ausführte ... Ich habe vim aktualisiert und es funktioniert jetzt wie erwartet. Hoffentlich hilft das jemandem ..
quelle