2016-04-25 8 views
1

sagen, dass ich meinen Zweig habe Alabama, die eine Reihe von Änderungen enthält (in Dateien foo, bar und hello) im Vergleich zum develop die es basiert auf, und ich habe ein (frisch) Zweig Boston, der ebenfalls auf develop basiert, der im Vergleich zu noch keine Änderungen aufweist.SmartGit: Merge Artikel I ausgeschlossen/verworfen bei früheren merge

Boston ist meine aktuelle lokale Zweigstelle und ich fusionierte Alabama in meinen Arbeitsbaum, verworfen aber die Änderungen an foo. Ich habe gedrängt, keine Konflikte, habe ein paar andere Commits gemacht, alles ist in Ordnung. Jetzt entscheide ich, dass ich diese Änderungen an foo benötige: Ich versuche, Alabama wieder in meinem Arbeitsbaum zusammenzuführen, aber die Änderungen zu foo werden nicht zusammengeführt, da SmartGit sich daran zu erinnern scheint, dass ich mich entschied, diese Änderungen nicht zu verwenden und jetzt automatisch ablegt sie für mich.

Was ist der richtige Weg, um die Änderungen an foo in Alabama zu bekommen? ;-)

+0

Werfen Sie einen Blick auf diese: http://stackoverflow.com/questions/36727996/re-merging-after-selective-or-partial-merge/36728406#36728406 – user3159253

Antwort

1

Eine Strategie zur Beseitigung Ihres Problems ist Rebase der Boston Zweig auf Alabama. Betrachten Sie das folgende Diagramm:

Alabama: d <- A1 <- A2 
Boston: d <- M1 <- B1 <- B2 

Hier die d begehen ist eine (möglicherweise von vielen) zu begehen in der develop Zweig. Sie können sehen, dass sowohl Alabama als auch Boston oben auf dieser gemeinsamen Geschichte stehen. Die A-Commits entsprechen dem Zweig Alabama, und einer oder mehrere von ihnen enthält die Änderungen für die Datei foo, die Sie in den Zweig Boston bringen möchten. Die B commits entsprechen dem Boston Zweig. Der Commit M1 ist der Zusammenführungs-Commit, der aus dem Versuch resultiert, Alabama in Boston zusammenzuführen, während die Änderung für die Datei foo verworfen wird.

Wenn Sie die Boston Zweig auf Alabama rebase , wird das Diagramm danach wie folgt aussehen:

Alabama: d <- A1 <- A2 
Boston: d <- A1 <- A2 <- M1' <- B1' <- B2' 

Hier sind die Befehle, dies zu tun:

git checkout Boston 
git rebase Alabama 

Mit anderen Worten, die Arbeit, die Sie in der Boston Niederlassung getan haben, wird jetzt auf Alabama sitzen, die die Änderungen in der Datei foo einschließen wird. Die Hauptmarkierungen bei einigen der Commits (z. B. B1') zeigen an, dass dies tatsächlich neue Commits in der Boston-Verzweigung sind. Außerdem können Sie während der Rebase Zusammenführungskonflikte erhalten. Insbesondere erwarten Sie Konflikte, wenn Sie das M1 Commit über Alabama wiederholen, da es von beiden Commits sehr ähnliche Änderungen geben wird.