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.

51voto

François Punkte 7698

Wenn Sie vim verwenden, können Sie das ausgezeichnete Plugin namens flüchtig .

Sie können den Unterschied einer Datei zwischen Arbeitskopie und Index mit :Gdiff und fügen Sie dann Zeilen oder Brocken in den Index ein, indem Sie klassische vim diff-Befehle wie dp . Speichern Sie die Änderungen im Index und bestätigen Sie mit :Gcommit und schon sind Sie fertig.

Sehr gute Einführungsscreencasts aquí (siehe insb. Teil 2 ).

0 Stimmen

Vielen Dank für diese Links. Genau das, was ich brauche. Besonders :diffget/:diffput im visuellen Modus, wo ich bestimmte Zeilen auswählen kann, die ich zurücksetzen/übernehmen möchte. Also, versichern Sie sich noch einmal: vim ist großartig.

41voto

user1338062 Punkte 10425

Zu beachten ist, dass für die Verwendung von git add --patch für eine neue Datei müssen Sie die Datei zunächst mit git add --intent-to-add :

git add -N file
git add -p file

40voto

Ich würde dringend empfehlen, die QuellBaum von Atlassian. (Es ist kostenlos.) Es macht dies trivial. Sie können einzelne Code-Blöcke oder einzelne Code-Zeilen schnell und einfach in Szene setzen.

enter image description here

3 Stimmen

Ich stimme zu, dass SourceTree ein gutes Werkzeug für diesen Zweck ist, weil es Ihnen eine feinere Kontrolle gibt, als es über die Befehlszeile möglich ist.

23 Stimmen

@cupcake Ich würde das Gegenteil behaupten, da SourceTree wahrscheinlich diese Kommandozeilen-Git-Executables verwendet, wird es immer möglich sein, die gleichen (oder mehr) feinkörnigen Aktionen über die "Kommandozeile" zu tun.

3 Stimmen

Unabhängig davon ist die feinkörnig Argument, das ich sehr empfehlen würde QuellBaum denn die Inszenierung von Hunks und einzelnen Linien ist super einfach: i.imgur.com/85bNu4C.png

23voto

jdsumsion Punkte 12936

Wenn ich viele Änderungen habe und am Ende ein paar Commits aus den Änderungen erstellen werde, möchte ich meinen Ausgangspunkt vorübergehend speichern, bevor ich die Dinge bereitstelle.

Zum Beispiel so:

$ git stash -u
Saved working directory and index state WIP on master: 47a1413 ...
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 1st commit"
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 2nd commit"
$ git stash pop

Die Antwort von Whymarrh ist das, was ich normalerweise tue, außer wenn es viele Änderungen gibt und ich merke, dass ich beim Staging einen Fehler machen könnte, und ich möchte einen festen Zustand haben, auf den ich für einen zweiten Durchgang zurückgreifen kann.

17voto

Holger Brandl Punkte 9150

IntelliJ IDEA (und ich schätze, alle anderen Produkte der Serie) hat seit v2018.1 eine eingebaute Unterstützung für partielle Übertragungen.

enter image description here

0 Stimmen

Zu einfache Methode. Ich fürchte, Intellij IDEA versucht, die letzten Konsolenliebhaber zu töten, die Git zu retten versucht.

0 Stimmen

Wie können Sie das, was Sie auf der rechten Seite hinzugefügt haben, aufschlüsseln, um nur ein paar Zeilen hinzuzufügen? (grüne Elemente auf der rechten Seite diff angezeigt, wenn es auf mehrere Zeilen ist) Bisher, PyCharm v2020.1.2, können Sie nur alle kontinuierlichen Änderungen in einem Block hinzufügen.

4 Stimmen

@amiabl Das können Sie nicht (ab v2020.1). Verfolgt von youtrack.jetbrains.com/issue/IDEA-186988

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