Ich arbeite mit einem Git-Repository, das ein Commit von einem anderen Git-Repository benötigt, das nichts von dem ersten weiß.
Normalerweise würde ich mit dem HEAD@{x}
im Reflog auswählen, aber da dieser .git
nichts von diesem Reflog-Eintrag (anderes physisches Verzeichnis) weiß, wie kann ich dies auswählen oder kann ich?
Ich benutze git-svn
. Mein erster Zweig verwendet git-svn
das trunk
eines Subversion-Repos, und der nächste Zweig verwendet git-svn
einen Subversion-Zweig.
git
cherry-pick
gitcoder182
quelle
quelle
Antworten:
Sie müssen das andere Repository als Remote hinzufügen und dann die Änderungen abrufen. Von dort aus sehen Sie das Commit und können es auswählen.
So wie das:
Jetzt haben Sie alle Informationen einfach zu tun
git cherry-pick
.Weitere Informationen zum Arbeiten mit Fernbedienungen finden Sie hier: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
quelle
--stdlayout
Option git-svn verwenden, wenn Sie das Standardlayout für Amtsleitungen / Zweige / Tags in Subversion verwenden. Dann ist der Subversion-Zweig nur ein entfernter Git-Zweig.git am < d821j8djd2dj812.patch
. Außerhalb von GH könnten ähnliche Konzepte durchgeführt werden, wie in der nachstehenden alternativen Antwort angegeben.Die Antwort lautet, wie angegeben, Format-Patch zu verwenden. Da es sich jedoch um die Frage handelt, wie aus einem anderen Ordner ausgewählt werden kann, finden Sie hier einen Code, um genau das zu tun:
quelle
git format-patch
Befehl erstellt einen Patch aussome_other_repo
dem von seinem SHA angegebenen Commit (nur-1
für ein einzelnes Commit). Dieser Patch wird an weitergeleitetgit am
, wodurch der Patch lokal angewendet wird (-3
dh, Sie versuchen die Drei-Wege-Zusammenführung, wenn der Patch nicht sauber angewendet werden kann). Hoffe das erklärt.--ignore-whitespace
. Voller Befehl:git --git-dir=../<some_other_repo>/.git format-patch -k -1 --stdout <commit SHA> | git am -3 -k --ignore-whitespace
Hier ist ein Beispiel für das Remote-Fetch-Merge.
Dann kannst du:
oder Sie könnten sogar den gesamten Zweig zusammenführen
quelle
git merge projectB/master
sehr, sehr falsch ist , weil Sie nicht die Änderungen von einem einzigen begehen (wie eine Kirsche-Pick würde) Anwendung, sind Sie tatsächlich beiZusammenführung aller Änderungen inprojectB/master
, die nicht in Ihrem eigenen enthaltenenmaster
Zweig.git remote rm projectB
. Verwenden Siegit tag -d tag-name
diese Option auch , um alle vom Remote-Repo abgerufenen Tags zu entfernen. Die Remote-Commits werden in Ihrem Verlauf nicht mehr angezeigt, und durch das Bereinigen werden sie schließlich aus dem Speicher entfernt.Sie können es tun, aber es erfordert zwei Schritte. Hier ist wie:
Ersetzen Sie
<remote-git-url>
durch die URL oder den Pfad zu dem Repository, aus dem Sie auswählen möchten.Ersetzen Sie ihn
<branch>
durch den Zweig- oder Tag-Namen, den Sie aus dem Remote-Repository auswählen möchten.Sie können durch
FETCH_HEAD
einen Git SHA aus der Filiale ersetzen .Aktualisiert: geändert basierend auf dem Feedback von @ pkalinow.
quelle
git fetch <repo-url> <branch> && git cherry-pick <sha>
.Hier sind die Schritte zum Hinzufügen einer Fernbedienung, zum Abrufen von Zweigen und zum Auswählen eines Commits
Quelle: https://coderwall.com/p/sgpksw
quelle
Siehe Erstellen und Anwenden eines Patches mit Git . (Aus dem Wortlaut Ihrer Frage ging ich davon aus, dass dieses andere Repository für eine völlig andere Codebasis bestimmt ist. Wenn es sich um ein Repository für dieselbe Codebasis handelt, sollten Sie es als Remote hinzufügen, wie von @CharlesB vorgeschlagen. Auch wenn es sich um ein anderes handelt Codebasis, ich denke, Sie könnten es immer noch als Remote hinzufügen, aber Sie möchten möglicherweise nicht den gesamten Zweig in Ihr Repository aufnehmen ...)
quelle
Sie können dies in einer Zeile wie folgt tun. Ich hoffe, Sie befinden sich im Git-Repository, das die von Kirschen gepflückte Änderung benötigt, und Sie haben den richtigen Zweig ausgecheckt.
git fetch [Zweig-URL] [Zweig zum Cherry-Pick von] && git Cherry-Pick [Commit-ID]
quelle
ssh://
Teil nicht, nur fürhttps://
Ja. Holen Sie sich das Repository und wählen Sie es aus dem Remote-Zweig aus.
quelle
Angenommen, es
A
handelt sich um das Repo, aus dem Sie Kirschen pflücken möchten, und um das Repo, zu dem Sie Kirschen pflückenB
möchten, können Sie dies durch Hinzufügen</path/to/repo/A/>/.git/objects
zu tun</path/to/repo/B>/.git/objects/info/alternates
. Erstellen Sie diesealternates
Dateien, wenn sie nicht vorhanden sind.Dadurch kann Repo B von Repo A aus auf alle Git-Objekte zugreifen und Cherry-Pick für Sie arbeiten.
quelle
Meine Situation war, dass ich ein nacktes Repo habe, zu dem das Team drängt, und einen Klon davon, der direkt daneben sitzt. Diese Zeilen in einem Makefile funktionieren für mich korrekt:
Indem wir den Meister des Bare Repo auf dem neuesten Stand halten, können wir eine vorgeschlagene Änderung auswählen, die im Bare Repo veröffentlicht wurde. Wir haben auch eine (kompliziertere) Möglichkeit, mehrere Braches für eine konsolidierte Überprüfung und Prüfung auszuwählen.
Wenn "weiß nichts" bedeutet, dass "nicht als Fernbedienung verwendet werden kann", hilft dies nicht, aber diese SO-Frage tauchte auf, als ich herum googelte, um diesen Workflow zu entwickeln, und dachte, ich würde einen Beitrag leisten.
quelle
Wenn Sie mehrere Commits für eine bestimmte Datei auswählen möchten, bis Sie ein bestimmtes Commit erreichen, verwenden Sie Folgendes.
quelle