3622 Stimmen

Nur einen Teil einer Datei in Git festschreiben

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?

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ählen git 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.

4961voto

cloudhead Punkte 15075

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:

  • y diesen Brocken für die nächste Übertragung bereitstellen
  • n diesen Brocken nicht für die nächste Übertragung bereitstellen
  • q aufhören; weder diesen Brocken noch einen der anderen Brocken in Szene setzen
  • a diesen Brocken und alle weiteren Brocken in der Datei
  • d diesen Hunk oder einen der späteren Hunks in der Datei nicht verlegen
  • g Wählen Sie ein Stück aus, zu dem Sie gehen möchten
  • / Suche nach einem Hunk, der dem angegebenen Regex entspricht
  • j diesen Brocken unentschieden lassen, siehe nächster unentschiedener Brocken
  • J diesen Brocken unentschieden lassen, siehe nächsten Brocken
  • k diesen Brocken unentschieden lassen, siehe vorherigen unentschiedenen Brocken
  • K diesen Brocken unentschieden lassen, siehe vorherigen Brocken
  • s den aktuellen Klumpen in kleinere Klumpen aufteilen
  • e den aktuellen Hunk manuell bearbeiten
    • Sie können den Hunk dann manuell bearbeiten, indem Sie die + / - von # (Dank veksen )
  • ? Hilfe zum Ausdrucken von Stücken

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 haben
  • git reset -p um versehentlich hinzugefügte Brocken wieder zu entfernen
  • git 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

141 Stimmen

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 .

8 Stimmen

>Was passiert, wenn die Datei bereits bereitgestellt wurde? Es werden nur nicht bereitgestellte Änderungen angezeigt. Dasselbe wie git diff tut.

4 Stimmen

Wie kann ich den aktuellen Hunk manuell bearbeiten? Ich weiß nicht, was ich tun soll, nachdem ich e eingegeben habe.

294voto

Jakub Narębski Punkte 286531

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.

1 Stimmen

Interessanterweise hatte Windows.github.com Unterstützung für partielle Dateiübertragungen, scheint diese aber vor kurzem eingestellt zu haben.

1 Stimmen

@Juri Ich glaube, die Unterstützung für partielle Dateiübertragungen ist wieder drin.

0 Stimmen

@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"! :-)

181voto

Ionuț G. Stan Punkte 168218

Git-GUI bietet diese Funktionalität in der Diff-Ansicht. Klicken Sie einfach mit der rechten Maustaste auf die Zeile(n), die Sie interessieren, und Sie sollten einen Menüpunkt "stage this line to commit" sehen.

18 Stimmen

Bei komplexen Patches ist dies für mich in der Regel der schnellste Weg.

9 Stimmen

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.

3 Stimmen

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.

124voto

theFreedomBanana Punkte 2184

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

13 Stimmen

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?

12 Stimmen

Für diejenigen, die keine Kurzschriftoptionen mögen, -e es --edit .

3 Stimmen

@Alex Die von theFreedomBanana hinzugefügten Referenzzitate stammen aus dem Abschnitt EDITING PATCHES in git --help add

79voto

Wenfang Du Punkte 5223

Wenn Sie VS Code verwenden, haben Sie Glück. Wählen Sie den Bereich, den Sie inszenieren möchten, und verwenden Sie dann Git: Stage Selected Ranges um sie in Szene zu setzen, und legen Sie sich fest, wenn Sie wollen.

Ich habe ein Gif aufgenommen, um zu zeigen, was ich meine:

enter image description here

0 Stimmen

Gibt es einen entsprechenden Git-Befehl dafür? Hinzufügen auf einer Zeile-für-Zeile-Basis, anstelle der automatischen Hunk-Generierung?

1 Stimmen

@sayandcode Sie können versuchen este aber ich denke, dass die GUI in diesem Fall praktischer ist :).

0 Stimmen

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

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.

Powered by:

X