Ich habe einen Baum:
%Vor%wobei 'b' von 'a' abhängt. Dann merke ich, dass ich einige Änderungen in Bezug auf das Thema 'a' machen muss, um mit 'b' fortzufahren, aber ich würde sie gerne auf 'b' als einen normalen Entwicklungskurs von 'b' machen:
%Vor%Wenn dann das, was ich auf 'b' erreichen möchte, fertig ist, möchte ich, dass mein Baum so aussieht:
%Vor%als ob ich tatsächlich alle Änderungen an 'a' gemacht hätte, dann habe ich sie auf 'b' zusammengeführt und dann auf 'b' fortgesetzt.
Ich weiß, dass ich das manuell machen kann:
1- rebase / cherry-pick 'a' verpflichtet sich von Zweig 'b' zu 'a'
2- Erstellen Sie einen temporären Zweig 'b-tmp' auf 'b'.
3- Setzen Sie den Zweig 'b' auf 'b2' zurück.
4 - füge 'a' auf 'b' zusammen.
5- Rebase / Cherry-Pick 'b' verpflichtet sich von 'b-tmp' auf 'b'.
6- lösche Zweig 'b-tmp'.
Ich kann ein Skript dafür erstellen, ich würde nur gerne wissen, ob es bessere Möglichkeiten / Ideen gibt, dies zu tun, außer diesen 6 Schritten.
Lassen Sie mich mit der Aussage beginnen, dass ich die Zweige des Themas lieber integrieren würde (Früh integrieren, Oft bauen ... klingelt?). In der Tat, wenn es Änderungen gibt, die irgendwann auf eine gehen sollten, würde ich zurückgehen, die Änderungen an a vornehmen und b über neu einfügen a .
Wenn a für einen anderen Zweck stabil sein muss, mache ich einen a-for-b Zweig, um die Arbeit vorübergehend zu speichern und neu zu erstellen b darüber.
Wenn Sie unbedingt mit Hinweis: Screencasts inklusive Dies ist ein einfacher funktionierender Baum mit dem Layout aus der Frage: Siehe Screencast hier Wieder siehe Screencast Wir können nun einen Vorher-Nachher-Vergleich durchführen: Ich habe mich bewusst dafür entschieden, für die Demo keine widersprüchlichen Änderungen vorzunehmen. Natürlich werden Sie im wirklichen Leben Zusammenführungskonflikte bekommen. Verwende Wenn Ihre Änderungen hygienisch sind und wirklich zu ihren jeweiligen Zweigstellen gehören, besteht die Chance, dass Konflikte nur wenige und leicht zu lösen sind. Andernfalls ist es an der Zeit, Ihr Verzweigungsschema zu überarbeiten (siehe Martin Fowler e.a.) Als Antwort auf Sie sagen auch, dass "wenn es Änderungen gibt, die irgendwann auf" a "übergehen sollten, würde ich zurückgehen, die Änderungen an" a "vornehmen und" b "auf" a "zurücksetzen. Ich bin mir nicht sicher, ob ich das auch verstehe. Kannst du es erklären? Ich meine, dass ich versuchen würde, die a3-, a4-, a5-Revisionen für den a Zweig sowieso zu machen und b auf diesen zu setzen, also Hier ist der Einstiegspunkt, aber angepasst an meinen idealisierten Workflow. Beachten Sie, dass das Endergebnis dieses alternativen Ergebnisses bereits genau ist, was Sie nach all dem Jonglieren erreicht haben, das oben unter 'Reorganisieren von Commits in ihre Zweigzweige' gezeigt wurde! Beachten Sie, dass es in der Praxis nicht schwierig ist, zum a-Zweig zurückzukehren, um Ihre a3 / a4 / a5-Commits zu committen: 2 solange sie nicht mit anderen Änderungen von a..b in Konflikt stehen; In diesem Fall hätten Sie Zum Startpunkt gelangen
Reorganisationen von Commits auf ihre Zweigstellen
%Vor%
Überprüfung der Ergebnisse
Macht es dauerhaft:
%Vor%
Notizen
git mergetool
und git rebase --continue
. Diskussion
<-- this is the
Merge Early/Soon/Frequently
mantra
)
git add -i
oder ähnlich in git guis oder zB vim fugitive
git checkout b
) git stash
first und git stash apply
, wenn Sie sich im a Zweig
Tags und Links git