Committen Sie nur einen Teil der Änderungen einer Datei in Git

Lesezeit: 8 Minuten

Benutzeravatar von freddiefujiwara
freddiefujiwara

Wenn ich Änderungen an einer Datei in Git vornehme, wie kann ich nur einige der Änderungen festschreiben?

Wie könnte ich zum Beispiel nur 15 Zeilen von 30 Zeilen festschreiben, die in einer Datei geändert wurden?

  • verwandter stackoverflow.com/q/34609924/52074: Wenn Sie ein Stück in kleinere Stücke aufteilen müssen.

    – Trevor Boyd Smith

    31. Oktober 2018 um 14:56 Uhr

  • Zusammenfassung: in Bezug auf die Fähigkeit: git gui = git add -e > git add -i -p; in Sachen Komfort: git gui > git add -i -p > git add -e. Also: abholen git gui wenn Sie Zugriff auf X haben. pick git add -i -p für einfache Dinge und wenn Sie X nicht haben oder verwenden möchten. git add -e für komplexes Staging ohne X.

    – Penghe Geng

    5. Juli 2019 um 16:08 Uhr


Sie können Folgendes verwenden:

git add --patch <filename>

oder kurz:

git add -p <filename>

Git zerlegt Ihre Datei in sinnvolle „Hunks“ (Teile der Datei). Es wird Sie dann mit dieser Frage auffordern:

Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?

Hier ist eine Beschreibung jeder Option:

  • j Stellen Sie diesen Hunk für den nächsten Commit bereit
  • n Stellen Sie diesen Hunk nicht für den nächsten Commit bereit
  • q Verlassen; Bühnen Sie diesen Hunk oder einen der verbleibenden Hunks nicht
  • a Dieses Hunk und alle späteren Hunks in der Datei inszenieren
  • d Stellen Sie diesen Hunk oder einen der späteren Hunks in der Datei nicht bereit
  • g Wählen Sie einen Block aus, zu dem Sie gehen möchten
  • / Suche nach einem Hunk, der mit der angegebenen Regex übereinstimmt
  • j lass diesen Hunk unentschieden, siehe nächsten unentschiedenen Hunk
  • J lass diesen Brocken unentschieden, siehe nächster Brocken
  • k lass diesen Hunk unentschieden, siehe vorherigen unentschiedenen Hunk
  • K lass diesen Hunk unentschieden, siehe vorheriger Hunk
  • s Teilen Sie das aktuelle Hunk in kleinere Hunks
  • e Bearbeiten Sie den aktuellen Hunk manuell
    • Sie können den Hunk dann manuell bearbeiten, indem Sie ihn ersetzen +/- durch # (Danke Veksen)
  • ? Hunk-Hilfe drucken

Wenn sich die Datei noch nicht im Repository befindet, können Sie dies zunächst tun git add -N <filename>. Danach kann es weitergehen git add -p <filename>.

Danach können Sie verwenden:

  • git diff --staged um zu überprüfen, ob Sie die richtigen Änderungen vorgenommen haben
  • git reset -p um irrtümlicherweise hinzugefügte Hunks zu deaktivieren
  • git commit -v um Ihren Commit anzuzeigen, während Sie die Commit-Nachricht bearbeiten.

Beachten Sie, dass dies ganz anders ist als die git format-patch Befehl, dessen Zweck es ist, Commit-Daten in a .patch Dateien.

Referenz für die Zukunft: Git-Tools – Interaktives Staging

  • Es könnte nützlich sein, das zu beachten -p/--patch ist eine Verknüpfung zur Patch-Aktion innerhalb der -i/--interactive Befehl, der das Nützliche einleitet Interaktiver Modus.

    – tutuDajuju

    15. Februar 2015 um 9:30 Uhr

  • >Was passiert, wenn diese Datei bereits bereitgestellt wurde? Es werden nur nicht inszenierte Änderungen angezeigt. Gleich wie git diff tut.

    – Eugen Konkow

    3. Juni 2015 um 9:52 Uhr

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

    – Husu

    1. November 2015 um 13:47 Uhr

  • Nach dem Drücken eSie können den Hunk manuell bearbeiten, indem Sie ihn ersetzen + oder - durch #

    – weksen

    24. November 2015 um 20:31 Uhr

  • hmm … wenn ich es tue git commit file es schreibt alles fest, nicht nur die spezifischen Änderungen, die ich wollte (obwohl git diff --staged zeigte nur die spezifischen Änderungen, die ich wollte) bearbeiten: git commit -p lässt Sie die “Hunks” auswählen und in einem Rutsch übergeben; und es schreibt nur die spezifischen Änderungen fest

    – Raffa

    9. Mai 2019 um 10:40 Uhr


Benutzeravatar von Jakub Narębski
Jakub Narębski

Sie können verwenden git add --interactive oder git add -p <file>und dann git commit (nicht git commit -a); sehen Interaktiver Modus in git-add Manpage oder folgen Sie einfach den Anweisungen.

Modernes Git hat auch git commit --interactive (und git commit --patchwas eine Verknüpfung zur Patch-Option im interaktiven Commit ist).

Wenn Sie dies lieber über die GUI tun, können Sie verwenden git-gui. Sie können einfach Chunks markieren, die Sie in den Commit aufnehmen möchten. Ich persönlich finde es einfacher als die Verwendung 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-Commits, scheint es aber kürzlich eingestellt zu haben.

    – Juri

    1. September 2014 um 20:41 Uhr

  • @Juri Ich denke, die Unterstützung für partielle Datei-Commits ist wieder da.

    – Ela782

    24. Februar 2015 um 10:40 Uhr

  • @Juri Gern geschehen. Ich habe tatsächlich nie bemerkt, dass es vorher dort war – ich habe es letzte Woche gesehen und dachte “Oh, was für eine erstaunliche neue Funktion”! 🙂

    – Ela782

    24. Februar 2015 um 17:25 Uhr

  • Heutzutage leitet windows.github.com zum umbenannten GitHub-Desktop weiter, der schöner ist als die Git-GUI und teilweise Commits unterstützt … aber keine Commit-Signierung unterstützt. Seufzen.

    Benutzer4942583

    2. Februar 2018 um 0:37 Uhr

  • @ user4942583 : Die GPG-Commit-Signatur wurde vor einem Jahr zu GitHub Desktop hinzugefügt.

    – Kaios

    5. Mai um 15:36 Uhr

Benutzeravatar von Ionuț G. Stan
Ionuț G. Stan

Git-GUI bietet diese Funktionalität unter der Diff-Ansicht. Klicken Sie einfach mit der rechten Maustaste auf die Linie(n), an der/denen Sie interessiert sind, und Sie sollten einen Menüeintrag “Diese Linie zum Festschreiben bereitstellen” sehen.

  • Für komplexe Patches ist dies normalerweise der schnellste Ansatz für mich.

    – hochl

    8. April 2015 um 7:35 Uhr

  • Dies ist eine sehr effiziente und intuitive Methode, um feinkörnige Änderungen zum Staging-Bereich hinzuzufügen. Es können auch mehrere Zeilen ausgewählt werden und alle Änderungen innerhalb dieser Auswahl werden hinzugefügt.

    – jox

    26. April 2015 um 23:13 Uhr

  • Beachten Sie, dass dies nicht der Fall ist gitk, aber es ist in Git Bash für Windows enthalten; Sie sollten einen Startmenüeintrag dafür haben oder können es mit dem Befehl starten git gui. Es gibt auch stage this hunk was wahrscheinlich nützlicher ist als stage this line. Könnte neu sein, da diese Antwort vor 10 Jahren erstellt wurde.

    – Chris

    26. November 2019 um 16:37 Uhr


  • Das was ich gesucht habe 🙂

    – Bleib ruhig

    18. Dezember 2020 um 9:24 Uhr

  • Es scheint auch die einzige Software mit dieser Fähigkeit zu sein, die unter Linux unterstützt wird :/

    – kdb

    22. November 2021 um 10:29 Uhr

Benutzeravatar von theFreedomBanana
dieFreiheitBanane

Ich glaube das git add -e myfile ist der einfachste Weg (zumindest meine Präferenz), da er einfach einen Texteditor öffnet und Sie auswählen lässt, welche Zeile Sie inszenieren möchten und welche nicht. Zu den Bearbeitungsbefehlen:

hinzugefügter Inhalt:

Hinzugefügte Inhalte werden durch Zeilen dargestellt, die mit „+“ beginnen. Sie können das Staging von zusätzlichen Zeilen 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änderter Inhalt wird durch “-“-Zeilen (Entfernen des alten Inhalts) gefolgt von “+”-Zeilen (Hinzufügen des Ersatzinhalts) dargestellt. Sie können das Staging der Änderung verhindern, indem Sie „-“-Zeilen in „ “ umwandeln und „+“-Zeilen entfernen. Beachten Sie, dass die Änderung von nur der Hälfte des Paares wahrscheinlich zu verwirrenden Änderungen am Index führt.

Alle Details über git add sind verfügbar auf git --help add

Benutzeravatar von Wenfang Du
Wenfang Du

Wenn Sie VS Code verwenden, haben Sie Glück. Wählen Sie den Bereich aus, den Sie bereitstellen möchten, und verwenden Sie ihn dann Git: Stage Selected Ranges um sie zu inszenieren und zu begehen, wenn Sie möchten.

Ich habe ein GIF aufgenommen, um zu demonstrieren, was ich meinte:

Geben Sie hier die Bildbeschreibung ein

  • Gibt es dazu einen entsprechenden Git-Befehl? Zeilenweises Hinzufügen statt automatischer Hunk-Generierung?

    – sagundcode

    13. August um 9:24 Uhr

  • @sayandcode Sie können dies versuchen, aber ich denke, GUI ist in diesem Fall bequemer :).

    – Wenfang Du

    14. August um 2:31 Uhr

Benutzeravatar von François
Francois

Wenn Sie vim verwenden, möchten Sie vielleicht das hervorragende Plugin namens Flüchtling.

Sie können den Unterschied einer Datei zwischen Arbeitskopie und Index mit sehen :Gdiffund fügen Sie dann mit klassischen vim diff-Befehlen wie z. B. Zeilen oder Hunks zum Index hinzu dp. Speichern Sie die Änderungen im Index und bestätigen Sie mit :Gcommitund du bist fertig.

Sehr gute einführende Screencasts hier (siehe bes. Teil 2).

  • Gibt es dazu einen entsprechenden Git-Befehl? Zeilenweises Hinzufügen statt automatischer Hunk-Generierung?

    – sagundcode

    13. August um 9:24 Uhr

  • @sayandcode Sie können dies versuchen, aber ich denke, GUI ist in diesem Fall bequemer :).

    – Wenfang Du

    14. August um 2:31 Uhr

Benutzeravatar von Bob Stein
Bob Stein

Ich würde die Verwendung dringend empfehlen Quellbaum von Atlassian. (Es ist kostenlos.) Es macht dies trivial. Sie können einzelne Codeblöcke oder einzelne Codezeilen schnell und einfach bereitstellen.

Geben Sie hier die Bildbeschreibung ein

  • Ich stimme zu, dass SourceTree ein gutes Tool für diesen Zweck ist, da es Ihnen eine feinkörnigere Kontrolle bietet, als dies über die Befehlszeile möglich ist.

    Benutzer456814

    12. August 2014 um 14:29 Uhr

  • @cupcake Ich würde das Gegenteil argumentieren, da SourceTree wahrscheinlich diese ausführbaren Befehlszeilen-Git-Dateien verwendet. Inhärent wird es immer möglich sein, dieselben (oder mehr) feinkörnigen Aktionen über die “Befehlszeile” auszuführen.

    – tutuDajuju

    15. Februar 2015 um 9:25 Uhr

  • Unabhängig davon feinkörnig Argument, das ich sehr empfehlen kann Quellbaum da das Inszenieren von Hunks und einzelnen Linien super einfach ist: i.imgur.com/85bNu4C.png

    – Michael Stefanow

    1. Juni 2015 um 10:57 Uhr

  • Was ist, wenn Sie einen Teil des “Hunks” nicht inszenieren möchten? Zum Beispiel möchte ich nur die Zeilen 50-100 festschreiben, aber nicht 1-50, aber SourceTree sieht Zeile 1-100 als ein “Hunk”.

    – Sonne

    29. März 2016 um 20:58 Uhr

  • @Sun Sie können auf Zeile 50 klicken und mit Umschalttaste auf Zeile 100 klicken und dann inszenieren. Sie können Zeile 50-100 problemlos in Sourcetree inszenieren 🙂

    – CodeMonkey123

    17. Dezember 2018 um 12:14 Uhr

1432060cookie-checkCommitten Sie nur einen Teil der Änderungen einer Datei in Git

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy