2016-04-21 15 views
2

Wir sind derzeit 3 ​​Entwickler arbeiten an einem Feature-Zweig. Wir haben weiterhin WIP-Commits an den Feature-Zweig (und an den Ursprung/Feature-Zweig) übergeben und gepusht und jeden zweiten Tag haben wir den Master mit dem Feature-Zweig verbunden, um sicherzustellen, dass wir mit all den anderen Änderungen auf dem Laufenden sind.Git - Verwenden von Rebase zum Zusammenführen von öffentlichen Zweig zu Master

Unser feature_branch enthält jetzt ~ 100 Commits (einschließlich vieler Merge-Commits), die leicht in ein oder zwei Commits zerquetscht werden können. Bis jetzt, wenn eine Arbeit an einem Feature-Zweig gemacht wird, haben wir es einfach zurück Master und das führte zu Spaghetti-Logs und Checkpoint-Commits, die zum Master geschoben werden.

Stattdessen möchten wir umbasen. Wenn wir entschieden haben, dass unsere Arbeit am feature_branch erledigt ist und kein Entwickler jemals neue Commits von/zu diesem Zweig ziehen oder schieben wird - und dass es Zeit ist, unsere Änderungen zurück an Master zu verschmelzen, wird Rebase the golden rule of rebasing verletzen?
Nach dem Lesen des Themas, rebase interaktiv oben auf Master klingt wie eine gute Idee (und dann wieder zu Master zusammenführen, die ein ff Merge sein wird), aber ich möchte nur sicherstellen, dass ich nichts vermisse.

Gibt es auch irgendwas falsches mit der Neusetzung von feature_branch, nachdem wir den Master immer wieder zusammengeführt haben (um ihn auf dem neuesten Stand zu halten)? Ist es in Ordnung, Merge-Commits zu zerquetschen?

Danke!

+0

Wenn der 'feature_branch' nur einen Commit hat, möchten Sie den Merge-Vorgang immer noch vermeiden? – idanshmu

+0

Ich versuche nicht, eine Zusammenführungsoperation zu vermeiden. Ich versuche nur herauszufinden, dass mein aktueller Git-Fluss gegeben ist - wenn ich bei "git merge" bleiben oder "git rebase" verwenden sollte – shays10

Antwort

2

Die Wahl von Rebase vs Merge ist zu einem gewissen Grad eine Frage des Geschmacks. Der Link, den Sie haben (mit der "goldenen Regel des Rebasings", um zu vermeiden, veröffentlichte Commits zu vermeiden) verwendet eine geschmackvolle Regel, die Dinge für gelegentliche Benutzer einfach hält. Allerdings gibt es nichts, das sagt, dass Sie und Ihre Mitarbeiter nicht im Voraus vereinbaren können, zu erlauben, veröffentlichten Verpflichtungen veröffentlicht, solange Sie und sie alle wissen, wie man mit ihnen umzugehen.

Die Git Repository für git hat mehrere bewusst-umbasiert Niederlassungen in ihm, genannt next und pu (pu steht für Pick Up, nicht Stinktier-Geruch :-)). Wenn Sie git fetch die neuesten git, werden Sie so sehen oft Dinge:

+ 104e649...1352ede next  -> origin/next (forced update) 
+ cf10e94...a619c8c pu   -> origin/pu (forced update) 

Notiere die forced update, die git fetch druckt, da das Update schnell kein vorwärts und tritt nur wegen der + im Refspec holen.

1

Eigentlich hängt es von Ihrem üblichen Workflow ab und ich denke nicht, dass Rebasieren immer falsch ist.

Wenn Sie beispielsweise einen Garrit-basierten Workflow verwenden, ist es normalerweise normal, mit dem Master zu rebasen, Ihre Commits in einem einzigen Commit zu zerquetschen und dann in den Master zu schieben, um ihn zusammenzuführen. (Grundsätzlich bieten Sie an, einen Patch zu meistern, der Ihren Code enthält, der aufgrund Ihrer Rebase-Operation bereits teilweise zusammengeführt wurde). Here finden Sie eine detailliertere Erklärung dieses Workflows, der die ganze Zeit über Rebasing verwendet.