601 Stimmen

Einen Commit mit Git teilweise herauspicken

Ich arbeite an 2 verschiedenen Zweigen: freigeben et Entwicklung .

Ich habe bemerkt, dass ich noch einige Änderungen integrieren muss, die in der freigeben Verzweigung zurück in die Entwicklung Zweigstelle.

Das Problem ist, dass ich nicht die gesamte Commit-Datei benötige, sondern nur einige Brocken in bestimmten Dateien.

git cherry-pick bc66559

reicht nicht aus.

Wenn ich eine

git show bc66559

Ich sehe den Unterschied, weiß aber nicht wirklich, wie ich das teilweise auf meinen aktuellen Arbeitsbaum anwenden kann.

1voto

adrock20 Punkte 167

Utilisez git format-patch den Teil des Commit herauszuschneiden, der Sie interessiert, und git am um sie auf einen anderen Zweig anzuwenden

git format-patch <sha> -- path/to/file
git checkout other-branch
git am *.patch

0voto

Kaz Punkte 51547

Wenn "teilweise Rosinenpickerei" bedeutet, dass innerhalb von Dateien einige Änderungen ausgewählt und andere verworfen werden, kann dies durch die Einbeziehung von git stash :

  1. Machen Sie die volle Rosinenpickerei.
  2. git reset HEAD^ um den gesamten Cherry-Picked-Commit in unstaged Arbeitsänderungen umzuwandeln.
  3. Jetzt git stash save --patch Interaktive Auswahl von unerwünschtem Material, das eingelagert werden soll.
  4. Git rollt die versteckten Änderungen aus Ihrer Arbeitskopie zurück.
  5. git commit
  6. Werfen Sie den Vorrat an unerwünschten Änderungen weg: git stash drop .

Tipp: Geben Sie dem Vorrat an unerwünschten Änderungen einen Namen: git stash save --patch junk Wenn Sie jetzt vergessen, (6) zu tun, werden Sie später den Vorrat als das erkennen, was er ist.

0voto

无名小路 Punkte 3631

Die beste Lösung für diese Frage ist eigentlich die Verwendung von checkout empfehlen

git checkout <branch> <path1>,<path2> ..

Nehmen wir zum Beispiel an, Sie befinden sich in Meister möchten Sie die Änderungen von dev1 auf project1/Controller/WebController1.java et project1/Service/WebService1.java können Sie dies verwenden:

git checkout dev1 project1/Controller/WebController1.java project1/Service/WebService1.java

Das bedeutet, dass die Meister Zweig nur Aktualisierungen von dev1 auf diesen beiden Wegen.

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