Wenn ich in Git Änderungen an einer Datei vornehme, wie kann ich dann nur einen Teil der Änderungen übertragen?
Wie kann ich zum Beispiel nur 15 von 30 geänderten Zeilen einer Datei übertragen?
Wenn ich in Git Änderungen an einer Datei vornehme, wie kann ich dann nur einen Teil der Änderungen übertragen?
Wie kann ich zum Beispiel nur 15 von 30 geänderten Zeilen einer Datei übertragen?
Sie können verwenden git add --patch <filename>
(oder -p
kurz), und git beginnt damit, Ihre Datei in "Hunks" (Teile der Datei) zu zerlegen, die es für sinnvoll hält. Es wird Sie dann mit dieser Frage konfrontieren:
Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?
Im Folgenden finden Sie eine Beschreibung der einzelnen Optionen:
+
/ -
von #
(Dank veksen )Wenn sich die Datei noch nicht im Repository befindet, können Sie zunächst git add -N <filename>
. Danach können Sie fortfahren mit git add -p <filename>
.
Danach können Sie sie verwenden:
git diff --staged
um zu überprüfen, ob Sie die richtigen Änderungen vorgenommen habengit reset -p
um versehentlich hinzugefügte Brocken wieder zu entfernengit commit -v
um Ihre Übergabe zu sehen, während Sie die Übergabemeldung bearbeiten.Dies unterscheidet sich deutlich von der git format-patch
Befehl, dessen Zweck es ist, die Commit-Daten in eine .patch
Dateien.
Referenz für die Zukunft: Git-Werkzeuge - Interaktives Staging
Es ist vielleicht nützlich zu wissen, dass -p/--patch
ist eine Abkürzung für die Patch-Aktion innerhalb der -i/--interactive
Befehl, der die nützliche Interaktiver Modus .
>Was passiert, wenn die Datei bereits bereitgestellt wurde? Es werden nur nicht bereitgestellte Änderungen angezeigt. Dasselbe wie git diff
tut.
Wie kann ich den aktuellen Hunk manuell bearbeiten? Ich weiß nicht, was ich tun soll, nachdem ich e eingegeben habe.
Sie können verwenden git add --interactive
o git add -p <_file_>
und dann git commit
( no git commit -a
); siehe Interaktiver Modus en git-add manpage, oder folgen Sie einfach den Anweisungen.
Modernes Git hat auch git commit --interactive
(und git commit --patch
(das ist die Abkürzung für die Option patch in der interaktiven Übergabe).
Wenn Sie es lieber über die GUI machen, können Sie git-gui . Sie können einfach die Teile markieren, die Sie in die Übergabe einbeziehen möchten. Ich persönlich finde das einfacher als die Verwendung von git add -i
. Andere Git-GUIs, wie QGit oder GitX, verfügen möglicherweise ebenfalls über diese Funktionalität.
Interessanterweise hatte Windows.github.com Unterstützung für partielle Dateiübertragungen, scheint diese aber vor kurzem eingestellt zu haben.
@Juri Gern geschehen. Ich habe eigentlich gar nicht bemerkt, dass es schon vorher da war - ich habe es letzte Woche gesehen und dachte "oh, was für eine tolle neue Funktion"! :-)
Dies ist ein sehr effizientes und intuitives Verfahren, um Änderungen im Bereitstellungsbereich feinkörnig vorzunehmen. Es können auch mehrere Zeilen ausgewählt werden und alle Änderungen innerhalb dieser Auswahl werden hinzugefügt.
Beachten Sie, dass es sich nicht um gitk
aber es ist in Git Bash für Windows enthalten; Sie sollten einen Eintrag im Startmenü dafür haben oder können es mit dem Befehl git gui
. Außerdem gibt es stage this hunk
was wahrscheinlich nützlicher ist als stage this line
. Könnte neu sein, da diese Antwort vor 10 Jahren erstellt wurde.
Ich glaube, dass git add -e myfile
ist der einfachste Weg (zumindest für mich), da er einfach einen Texteditor öffnet und Sie auswählen können, welche Zeile Sie bearbeiten möchten und welche nicht. Zu den Bearbeitungsbefehlen:
zusätzliche Inhalte:
Hinzugefügte Inhalte werden durch Zeilen dargestellt, die mit "+" beginnen. Sie können die Bereitstellung von Zusatzzeilen verhindern, indem Sie sie löschen.
entfernter Inhalt:
Entfernte Inhalte werden durch Zeilen dargestellt, die mit "-" beginnen. Sie können verhindern, dass sie entfernt werden, indem Sie das "-" in ein " " (Leerzeichen) umwandeln.
geänderter Inhalt:
Geänderte Inhalte werden durch "-"-Zeilen (Entfernen des alten Inhalts) gefolgt von "+"-Zeilen (Hinzufügen des neuen Inhalts) dargestellt. Sie können verhindern, dass die Änderung in den Hintergrund tritt, indem Sie "-"-Zeilen in " " umwandeln und "+"-Zeilen entfernen. Zeilen entfernen. Beachten Sie, dass die Änderung von nur einer Hälfte des Paares zu verwirrenden Änderungen im Index führen kann.
Alle Details über git add
sind verfügbar auf git --help add
Dies wäre nützlicher, wenn es irgendwo eine klare Erklärung gäbe, wie man diese Zeilen tatsächlich auswählt (d.h. die eigentlichen Befehle, die man eingeben muss). Ich konnte in der Dokumentation keine Erklärung finden. Könnten Sie einen Verweis hinzufügen?
@Alex Die von theFreedomBanana hinzugefügten Referenzzitate stammen aus dem Abschnitt EDITING PATCHES in git --help add
Gibt es einen entsprechenden Git-Befehl dafür? Hinzufügen auf einer Zeile-für-Zeile-Basis, anstelle der automatischen Hunk-Generierung?
@sayandcode Sie können versuchen este aber ich denke, dass die GUI in diesem Fall praktischer ist :).
Ich wünschte, 1) ihr nächster Hunk-Kurzbefehl (Alt + F5) würde über Dateien gehen: github.com/microsoft/vscode/issues/24389 | github.com/microsoft/vscode/issues/50434 und 2) dass es eine Möglichkeit gäbe, Hunks hinzuzufügen, ohne Zeilen auswählen zu müssen, wenn man den gesamten Hunk haben möchte github.com/microsoft/vscode/issues/48323 | github.com/Microsoft/vscode/issues/13740
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
8 Stimmen
Zugehörige stackoverflow.com/q/34609924/52074 : wenn Sie einen Brocken in kleinere Stücke teilen müssen.
8 Stimmen
Zusammenfassung: in Bezug auf die Fähigkeiten:
git gui
=git add -e
>git add -i -p
unter dem Aspekt der Bequemlichkeit:git gui
>git add -i -p
>git add -e
. Also: auswählengit gui
wenn Sie Zugang zu X haben.git add -i -p
für einfache Dinge und wenn Sie X nicht verwenden müssen oder wollen.git add -e
für komplexe Inszenierungen ohne X.