2017-02-10 3 views
3

Ich brauche zwei Git Repositories in ein brandneues, drittes Repository zusammenführen. Ich folgte den folgenden Anweisungen und sie funktionieren, aber das Ergebnis ist nicht das, was ich erwartet habe. Merge two Git repositories without breaking file historyMischen Sie zwei Git-Repositories und behalten Sie den Master-Verlauf

Blick auf diese:

Git Merge operation

Der Master ist nicht alligned.

  • Ist es möglich, alles auf dem gleichen Master zusammenzuführen?
  • Ich möchte eine saubere Geschichte auf dem Master haben.

Sie sind frei zu meinem Beispiel Repository auf Github verwenden:

Das ist mein fusionierte Ergebnis.

Dies ist die Situation, die ich haben möchte: (lackierte Lösung !!!)

Painted solution!!

Wie ich zum laufenden bekam Situation:

# Assume the current directory is where we want the new repository to be created 
# Create the new repository 
git init 

# Before we do a merge, we have to have an initial commit, so we'll make a dummy commit 
dir > Read.md 
git add . 
git commit -m "initial commit" 

# Add a remote for and fetch the old RepoA 
git remote add -f RepoA https://github.com/DimitriDewaele/RepoA 

# Merge the files from RepoA/master into new/master 
git merge RepoA/master --allow-unrelated-histories 

# Do the same thing for RepoB 
git remote add -f RepoB https://github.com/DimitriDewaele/RepoB 

# Merge the files from RepoB/master into new/master 
git merge RepoB/master --allow-unrelated-histories 

Alle Hilfe wird geschätzt!

UPDATE: ANTWORT

Die richtige Antwort ist, statt merge rebase.

Code:

# Rebase the working branch (master) on top of repoB 
git rebase RepoB/master 

# Rebase teh working branch (master with RepoB) on top op repoA 
git rebase RepoA/master 

Ein Problem bleibt. Der 2. Repo verliert die Elternansicht. Ich schrieb eine Follow-up-Frage hierzu: Merge two Git repos and keep the history

enter image description here

+1

Können Sie genauer erklären, was Sie erwartet haben und wie das anders ist? –

+0

Sie haben alles auf einem Master, ich bin mir nicht sicher, was Sie mit "ausgerichtet" meinen - versuchen Sie, die RepoA und RepoB-Fernbedienungen von Ihrem lokalen entfernt und dann sehen, wie das Diagramm aussieht. – Adrian

+0

Ich habe eine 'gemalte Lösung' hinzugefügt –

Antwort

1

Es ist einfach, statt rebase Verwendung verschmelzen.Angenommen, Sie repoA/master zunächst nur tun (nach Abrufen und das Hinzufügen von Fernbedienungen)

# starting on master 
git rebase RepoB/master # place master on top of masterB 
git rebase RepoA/master # place master (with masterB) on top of masterA 

Hinweis haben wollen, dass Rebases potentiell destruktiv ist und ein bisschen unintuitive zunächst, so Ich empfehle das Lesen über sie zuerst (SO Dokumentation in Der Link oben ist ein guter Anfang)

+0

Danke für die richtige Antwort. Ein kleines Problem: Durch das Rebaen von RepoA verliere ich den Merge-Verlauf. Siehe das Bild oben (Ich habe den aktuellen Status oben hinzugefügt). Ist es möglich, das zu behalten? –

+0

@DimitriDewaele versuchen Sie die '--preserve-merges' Option von' Rebase' – Dunno

+0

Wie in @ DimitriDewaele Follow-up-Frage festgestellt, 'Rebase' ist wirklich nicht das, was Sie dafür verwenden möchten: http://StackOverflow.com/a/42457384/54249 – dahlbyk

Verwandte Themen