Wie gehe ich zu einem bestimmten Commit in der Geschichte des Sub-Repo?
Wenn Sie die Commits gequetscht haben, dann gibt es keine Möglichkeit, da der Squash die verschiedenen Commits verliert.
Andernfalls können Sie mit einem nicht gequetschten Teilbaum zu jedem Commit des Teilbaums mit dem gleichen Hash wie im ursprünglichen Repository navigieren, aus dem der Teilbaum erstellt wurde.
git subtree
(ohne den Squash) fügt alle relevanten Commits aus dem externen Repository als unabhängigen Baum in Ihrem aktuellen Repository in Ihr Repository ein. Wenn Sie eine git subtree add
tun, können Sie feststellen, dass mehrere Commits hinzugefügt wurden (alle ursprünglichen Commits aus dem externen Repo) und eine letzte Zusammenführung Commit, die den Inhalt aus diesem Teilbaum in das angegebene Verzeichnis mit der Option --prefix
verschoben. Kurz gesagt, es prüft einen Zweig von einem anderen, nicht verwandten Repository und fügt es dann in Ihren aktuellen Zweig ein, indem der gesamte Inhalt in einen bestimmten Unterordner verschoben wird.
All dies bedeutet, dass Ihnen die Historie des externen Repos zur Verfügung steht, Sie können es einfach so auschecken, wenn Sie daran denken, dass dieser Checkout wahrscheinlich den gesamten Inhalt Ihres Arbeitsbereichs verändert , die bei großen Projekten lange dauern können.
Dies bewegt uns zum zweiten:
Wie kann ich herauspicken ein von einem Unter Repo in meinem Haupt-Repo-git Teilstruktur unter Verwendung begehen?
Scheint wie es ist nicht aktuelle "cherrypicking" unterstützt von git subtree
auf sich. Aber angesichts der Implikationen all des oben genannten kann Folgendes getan werden.
# move yourself to the subtree commit of your choice
git checkout <subtree-hash>
# fetch commits from the subtree repository, to have available the commit you want
# to cherry pick.
git fetch <path-to-remote>
# cherry pick the hash you want
git cherry-pick <cherry-hash>
# move back to your original branch
git checkout <your-branch>
# subtree merge your cherry pick (using the previous HEAD),
# so that it gets moved to the correct location specified by prefix.
git subtree merge --prefix <subtree-prefix> [email protected]{1}
# Since you probably fetched more commits that you needed from
# the remote, you might want to clean those that where not needed
git gc
berücksichtigen, dass diese nach tun, wenn Sie zu git subtree pull
in Ihren Unterbaum versuchen, ein Update, und es enthält die Sie Kirsche begeht gepflückt, werden Sie mit einem Konflikt beenden, da Sie zwei Änderungen an der gleichen Stelle haben .
Eine andere einfachere Option, wenn Sie Zugriff auf die ursprüngliche Teilbaum-Repository haben, ist es, die Kirsche holen dort in einer Branche und dann nur git subtree pull
dieser bestimmten Branche.
Ich untersuchte dies übrigens mit 'git Version 1.8.1', die bereits den Unterbaumbefehl enthält. – LopSae