2012-05-22 3 views
9

Ich benutze Git-Flow für meine Projekte und habe eine ziemlich komplizierte Reihe von Änderungen im Entwicklungszweig gestartet, die länger als erwartet zu sein scheinen.Änderungen, die in der Zweigentwicklung gemacht wurden, in einen neuen Zweig der git-flow-Funktion verschieben?

Ich wünschte, ich hätte dies in einem Feature-Zweig getan, da ich eine neue Version mit anderen Änderungen vornehmen möchten. Wie kann ich diese nicht festgeschriebenen Änderungen in einen neuen git-flow Feature-Zweig verschieben?

Antwort

17

Wenn Sie nicht gemacht haben begeht

Wenn Sie einfach nur eine schmutzige Arbeitskopie haben, nur handeln, wie Sie im Begriff sind, eine neue Funktion zu starten:

git flow feature start awesomeness 
git commit -va 

Wenn Sie tun Machen Sie einige Commits

Wenn Commits in entwickeln, die in Ihrem Feature-Zweig hätte sein sollen, die oben genannten st eps sind gleich. Zusätzlich wenn Sie - wollen (möglicherweise ist dies nicht erforderlich) Ihre entwickeln Zweig zurückgesetzt zurück, wo es war, bevor Sie die Änderungen kommen für die Feature-Zweig begonnen, die Sie mit tun:

git flow feature start awesomeness 
git commit -va 
git checkout develop 
git reset origin/develop --hard 
+0

Ich wusste nicht, dass die Funktion nach den nicht festgeschriebenen Änderungen gestartet werden konnte. Vielen Dank! – plang

2

Hier ist eine Möglichkeit, es zu tun:

git checkout where-you-should-have-made-your-feature-branch 
git branch feature-branch 
git checkout feature-branch 
foreach commit in commits-that-should-have-been-on-your-feature-branch: 
    # do this for each commit in chronological order 
    git cherry-pick commit 

Jetzt hängt es davon ab, ob Sie bereits Ihre Niederlassung zu einem öffentlichen Repository entwickeln geschoben oder nicht. Wenn alles nach wie vor privat ist, und Sie wollen die Geschichte neu zu schreiben:

git checkout develop-branch 
foreach commit in commits-that-should-have-been-on-your-feature-branch: 
    # do this for each commit in reverse chronological order 
    git rebase --onto commit~1 commit develop-branch 

Wenn Sie nicht Geschichte neu zu schreiben wollen:

git checkout develop-branch 
foreach commit in commits-that-should-have-been-on-your-feature-branch: 
    # do this for each commit in reverse chronological order 
    git revert commit 

Und das sollte es tun.

+0

git Rebase in einer Schleife scheint ein bisschen unnötig/ungeschickt - was ist die Idee dort? – AD7six

+0

Hallo, danke für deine Antwort, aber noch war nichts unternommen worden. Die Lösung war einfacher. – plang