Frage

Ich habe zwei Zweige von meinem Meister:

  • v2.1 : (Version 2) Ich habe auf für mehrere Monate
  • wss : dass ich gestern erstellt eine bestimmte Funktion zu meinem Herrn hinzuzufügen (in der Produktion)

Gibt es eine Möglichkeit der gestrigen Festschreibungen von WSS v2.1 zu kopieren?

War es hilfreich?

Lösung

Sie sollten wirklich einen Workflow haben, dass Sie dies alles durch die Zusammenlegung tun können:

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (wss)

Also alles, was Sie tun müssen, ist git checkout v2.1 und git merge wss. Wenn aus irgendeinem Grund kann man wirklich nicht tun, und sie können nicht git rebase Ihre WSS Zweig an der richtigen Stelle zu bewegen, wird der Befehl zu packen eine einzige von irgendwo begehen und wenden es an anderer Stelle ist git cherry-Pick . Schaut euch einfach mal den Zweig Sie wollen es anzuwenden auf und laufen git cherry-pick <SHA of commit to cherry-pick>.

Einige der Möglichkeiten, Fütterungsmaterial können Sie sparen:

Wenn Sie Ihre Geschichte sieht wie folgt aus:

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (v2-only) - x - x - x (wss)

Sie git rebase --onto v2 v2-only wss zu bewegen WSS direkt auf v2 verwenden:

- x - x - x (v2) - x - x - x (v2.1)
          |\
          |  x - x - x (v2-only)
           \
             x - x - x (wss)

Dann können Sie verschmelzen! Wenn Sie wirklich, wirklich, wirklich kann nicht an den Punkt, wo Sie verschmelzen können, können Sie immer noch Fütterungsmaterial verwenden, um effektiv mehrere kirsch Picks auf einmal tun:

# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase

Hinweis: der Grund, dass es einige zusätzliche Arbeit nimmt, um dies zu tun, ist, dass es doppelte Commits in Ihrem Repository zu schaffen. Das ist nicht wirklich eine gute Sache - der ganze Sinn der einfachen Verzweigen und Zusammenführens ist in der Lage sein, alles zu tun, um (s) einen Ort, um begehen und Merging sie in, wo immer sie gebraucht wird. Doppelte Commits bedeuten eine Absicht nie diese beiden Zweige zusammenführen (wenn Sie sich entscheiden, später, werden Sie Konflikte bekommen).

Andere Tipps

Mit

git cherry-pick <commit>

<commit> auf Ihren Stromzweig anzuwenden.

Ich würde mich wahrscheinlich cross-check Commits ich in gitk holen und kirsch holen sie mit der rechten Maustaste auf den Eintrag begehen dort statt.


Wenn Sie mehr automatische gehen (mit all seinen Gefahren) und unter der Annahme, alle Commits seit gestern passiert WSS Sie die Liste der Commits mit (git log vorgeschlagen von Jefromi)

mit --pretty erzeugen könnten
git log --reverse --since=yesterday --pretty=%H

so alles zusammen vorausgesetzt, Sie verwenden bash

for commit in $(git log --reverse --since=yesterday --pretty=%H);
do
    git cherry-pick $commit
done

Wenn etwas schief geht hier (es hat eine Menge Potenzial ist) sind Sie in Schwierigkeiten, da diese Arbeiten an der Live-Kasse, also entweder manuell tun kirsch Picks oder Verwendung Fütterungsmaterial wie von Jefromi vorgeschlagen.

git cherry-pick: Übernehmen Sie die von einigen bestehenden Commits eingeführten Änderungen

Angenommen, wir haben Zweig A mit (X, Y, Z) Commits. Wir müssen diese Commits Zweig B hinzuzufügen. Wir werden die cherry-pick Operationen verwenden.

Wenn wir cherry-pick verwenden, sollten wir Commits auf Zweig B in der gleichen chronologischen Reihenfolge hinzufügen, dass die Commits erscheinen in der Niederlassung A .

cherry-pick hat eine Reihe von Commits unterstützen, aber wenn Sie Merge Commits in diesem Bereich haben, wird es wirklich kompliziert

git checkout B
git cherry-pick SHA-COMMIT-X
git cherry-pick SHA-COMMIT-Y
git cherry-pick SHA-COMMIT-Z

Beispiel für Workflow:

 image description hier

eingeben

Wir verwenden cherry-pick mit Optionen

-e oder --edit . Mit dieser Option git cherry-pick lassen Sie die Commit-Nachricht bearbeiten, bevor begehen

-n oder --no-commit : In der Regel der Befehl erstellt automatisch eine Folge von Commits. Dieses Flag wendet die Änderungen notwendig, um herauspicken jeweils zu Ihrem Arbeits Baum und dem Index mit dem Namen begehen, ohne dass irgendwelche begehen. Darüber hinaus, wenn diese Option verwendet wird, Ihr Index muss nicht der HEAD übereinstimmen begehen. Die Kirsche-Pick erfolgt gegen Anfang Status Ihres Index.

Hier ein interessanter Artikel über cherry-pick.

Sie können einen Patch von den Commits erstellen, den Sie kopieren möchten, und den Patch auf den Zielzweig gelten.

oder wenn Sie etwas weniger auf der Seite des Evangelist Sie können ein wenig hässlich Art und Weise tun, ich verwende. In deploy_template gibt es Commits ich auf meinem Master als Zweig deploy kopieren möchten

git branch deploy deploy_template
git checkout deploy
git rebase master

Dieser neue Zweig deploy schaffen (I -f verwenden, um überschreiben Zweig vorhandenen deploy) auf deploy_template, dann rebase diesen neuen Zweig auf Master, deploy_template unangetastet bleiben.

Für den einfachen Fall nur das Kopieren der letzten von Ast WSS v2.1 begehen, können Sie einfach die ID begehen greifen (git log --oneline | head -n 1) und tun:

git checkout v2.1
git merge <commit>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top