Füge Git Repo in den Zweig eines anderen Repos ein

120

Gegeben Repo Foo und Repo Bar. Ich möchte Bar mit Foo zusammenführen, aber nur in einem separaten Zweig namens baz.

git checkout -b baz <= hier das Bar Repo einfügen.

Milchhändler
quelle

Antworten:

228

Sie können ein Repository nicht in einem Zweig zusammenführen . Sie können einen Zweig aus einem anderen Repository in einen Zweig in Ihrem lokalen Repository zusammenführen. Angenommen, Sie haben zwei Repositorys foound barbeide befinden sich in Ihrem aktuellen Verzeichnis:

$ ls
foo bar

Wechseln Sie in das fooRepository:

$ cd foo

Fügen Sie das barRepository als Remote hinzu und rufen Sie es ab:

$ git remote add bar ../bar
$ git remote update

Erstellen Sie einen neuen Zweig bazim fooRepository basierend auf Ihrem aktuellen Zweig:

$ git checkout -b baz

Zweig somebranchaus dem barRepository in den aktuellen Zweig zusammenführen:

$ git merge --allow-unrelated-histories bar/somebranch

( --allow-unrelated-historiesist vor Git Version 2.9 nicht erforderlich)

Larsks
quelle
21
seit git 2.9 müssen sie wahrscheinlich --allow-unrelated-historiesden git merge befehl hinzufügen .
Drasill
2
Info zum Kommentar von @Drasill: github.com/git/git/blob/master/Documentation/RelNotes/…
GaTechThomas
10
Ich habe keine Ahnung, was ich tue und kann dies mit Platzhaltern für foo / bar nicht wirklich lesen. Kann jemand dies mit Beispielen aus der Praxis bearbeiten (wie gegebenenfalls Links und dergleichen)?
Rien333
Oh, das ist großartig. Ich würde es vorziehen, es in einem Unterverzeichnis zusammenzuführen. Es kann nicht so anders sein, oder? Ich würde diesen Schritt lieber hinzufügen.
Macetw
1
Ich bekomme jede Menge Zusammenführungskonflikte. Wie auch immer, Sie könnten die Fusion in einem neuen Zweig erzwingen?
Nomadoda
41

Aktualisiert mit "realen" Befehlen:

Beginnen Sie in Ihrem Repo-Verzeichnis und stellen Sie sicher, dass Ihre Arbeitskopie sauber ist (keine Dateien geändert, hinzugefügt oder entfernt).


Erstellen Sie einen neuen Zweig:

git checkout -b <my-branch>

Fügen Sie die sekundäre Fernbedienung hinzu und rufen Sie sie ab:

git remote add <repo-name> [email protected]:xxx/<repo-name>.git
git remote update

Führen Sie einen ihrer Zweige in Ihrem aktuellen Zweig zusammen:

git merge <repo-name>/<their-branch>


Wenn Sie nicht wissen, was <their-branch>Sie wollen, dann machen Sie esmaster

Wenn Sie sicher sind, dass Sie alle Remote-Änderungen akzeptieren und Konflikte vermeiden möchten ( überschreiben Sie Ihre ), können Sie im letzten Schritt die -X theirsOption für angeben git merge.

Wenn Sie es in ein Unterverzeichnis einfügen möchten, sollten Sie wahrscheinlich Git-Submodule verwenden

vinzdef
quelle
3

Mit der Anleitung von Larsks konnte ich dies mit SourceTree tun.

  1. Erstellt einen Zweig im Ziel-Repository
  2. Das Quell-Repository wurde als Remote hinzugefügt, indem Sie auf die Schaltfläche Einstellungen klicken und das Quell-Repository hinzufügen.
  3. Zweige aus beiden Repositorys werden jetzt in der Verzweigungsliste angezeigt. Ich habe das Zusammenführungstool verwendet, um einen Zweig aus dem Quell-Repository mit dem Zweig meines neuen Ziel-Repositorys zusammenzuführen.
  4. Konflikte mit SourceTree oder meiner IDE wurden behoben
  5. Übernehmen Sie die Änderungen in meinem Zweig.
  6. Entfernen Sie das Quell-Repository mithilfe der Schaltfläche Einstellungen aus der Remote-Liste.
TheBigSot
quelle