2012-04-10 9 views
11

das folgende Szenario Angenommen:Git zwischen zwei Ordnern zusammenführen, nicht Zweige

ich ein Git-Projekt haben, das eine Richt project benannt hat. In diesem Verzeichnis habe ich einige Commits gemacht. Dann habe ich mit cp -r dieses Verzeichnis zu einem Verzeichnis namens dupliziert, d. H. Ich habe manuell eine Verzweigung erstellt.

Jetzt möchte ich diese beiden Ordner zusammenführen, als wenn sie zwei Zweige wären, gibt es eine Möglichkeit, das mit Git zu tun?

Um genauer auf mein Problem zu sein. Ich habe ein SVN-Repository, das ich mit git-svn-Tool verwende, um es zu klonen. Und ich kann die -T/-b/-t Optionen nicht verwenden, aber ich möchte eine Zusammenführung machen.

+0

Können Sie ein Git-Repository in 'project' und' project-with-feature-b' initialisieren und dann ein 'git pull-Projekt-mit-Feature-b' in' project'? –

+0

Das Problem mit dieser Problemumgehung ist, dass es nicht die Geschichte von "project-with-feature-b" verwendet, um die Zusammenführung zu verbessern. –

+0

Hast du 'git pull --rebase project-with-feature-b' versucht? Es sollte die kombinierte Geschichte Ihrer zwei Projekte speichern. –

Antwort

4

Ja, Sie können dies technisch erreichen, aber nur, weil es nicht zu spät ist, um Ihren Fehler zu beheben. Sie müssen in der Zeit zurück gehen und dies den richtigen Weg zu tun:

  1. Ihre project-with-feature-b Ordner außerhalb Ihrer git Repo verschieben:

    $ mv project-with-feature-b .. 
    
  2. durch git log Gehen Sie zurück und die ID der letzten Commit finden commit, bevor Sie das Verzeichnis project-with-feature-b erstellt haben. Wenn Sie innerhalb des Verzeichnisses project-with-feature-b keine Commits vorgenommen haben, können Sie diesen Schritt überspringen.

  3. Erstellen Sie einen neuen Zweig namens feature-b basierend auf dieser Commit-ID. Wenn Sie in Schritt 2 übersprungen, weglassen <commit-id-from-step-2>

    $ git branch feature-b <commit-id-from-step-2> 
    $ git checkout feature-b 
    
  4. Im feature-b Zweig, ersetzen Sie die project Ordner mit Ihrem Backup project-with-feauture-b

    $ rm -rf project 
    $ mv ../project-with-feature-b project 
    $ git add project 
    $ git commit -m "Add feature-b" 
    
  5. zum Master-Zweig Gehen Sie zurück und verschmelzen Ihre feature-b Niederlassung in Master

    $ git merge --no-ff feature-b 
    

In der Zukunft sollten Sie Zweige wie oben vor verwenden Sie beginnen zu arbeiten. Lernen Sie, die Werkzeuge richtig zu benutzen, anstatt wie Sie denken sollten sie arbeiten.

+2

Das Problem damit ist, dass die "Feature-B" Geschichte verloren ist. – KurzedMetal

1

Diese Frage ist sehr alt, ich vor kurzem beigetreten.

Ich benutze ubuntu, und verwenden meld Probleme zu lösen verschmelzen. So

Wenn ich 2 Ordner des gleichen App, die geringfügigen Änderungen haben könnte.

Ich werde dies im Terminal tun

meld ./app_branch_master ./app_branch_dev 

Dies wird sowohl den Ordner öffnen, Meld werden sowohl die Zeit nehmen, um die Ordner zu vergleichen. Es wird Ihnen zeigen, was auf der linken Seite ist und was auf der rechten Seite ist. Sie können auch wenig Code von dort bewegen.

So mache ich es.

Verwandte Themen