2012-06-29 20 views
10

Nach der Lektüre dieses Artikels, macht es Sinn, aus dem Hauptzweig auf meiner Funktion Zweig zu sammeln Änderungen zu rebase: Git workflow and rebase vs merge questionsGIT Basiert eine Zweigstelle, an der zusammengearbeitet wird?

clone the remote repo 
git checkout -b my_new_feature 
..work and commit some stuff 
git rebase master 
..work and commit some stuff 
git rebase master 
..finish the feature 
git checkout master 
git merge my_new_feature 

Dies funktioniert gut, wenn die Funktion Zweig ist lokal für meine Maschine und ich kann umschreiben Geschichte wie ich will.

Aber was ist, wenn ich mit jemand anderem im Feature-Zweig zusammenarbeite. Wie erhalten wir die neuesten Änderungen aus der Hauptniederlassung in unseren Feature-Zweig, nachdem sich unser Feature-Zweig im Remote-Repository befindet?

Also fusionieren wir? Oder gibt es eine andere glatte GIT-Methode, um dies zu tun?

Vielen Dank im Voraus!

Antwort

1

Wenn Sie alleine arbeiten, tun die Rebases nichts. Du hast nichts Neues zum Meistern gemacht.

Ihre Merge wird ein Vorspulen verschmelzen und Sie könnten es tun, indem es nicht heraus überhaupt Überprüfung mit

git push . HEAD:master 

Ob Sie mit jemandem oder nicht arbeiten, arbeiten Zusammenführung, die in Master in Ihre Funktion ist Zweig ist eine schlechte Praxis. Es wird als Back-Merge bezeichnet. Der Grund dafür ist, dass Sie jetzt keine atomare Arbeit haben. Die Geschichte des Masters ist nun mit Ihrer Funktion verflochten, was das Arbeiten mit dieser Funktion, wie das Rebasieren, in vielen Situationen unmöglich macht.

Sie müssen über Ihre Verzweigungsstrategie nachdenken und was Sie erreichen möchten. Hier ist mein:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

Sie können sehen, dass jeder Zweig beginnt, sich von der gleichen Stelle. Sie verfügen über einen separaten Integrationszweig und einen Release Candidate Branch, um die gewünschten Funktionen zu kombinieren und anzupassen, ohne sie zu kontaminieren.

Für die Zusammenarbeit mit einem Kollegen an einem Feature hängt es davon ab, wie groß ein Feature ist (die Granularität Ihrer Arbeit). Wenn es groß ist, können Sie den obigen Prozess auf das Feature selbst anwenden und stattdessen pro Aufgabe verzweigen.

Wenn es eine kleine Funktion ist, können Sie auf diesem Zweig zusammenführen oder umbasen - es wird nicht viel ausmachen. An diesem Punkt kommt es darauf an, mit was sich das Team wohl fühlt.

+0

Dynmitruk: Danke für den Beitrag und Link. Von der Verbindung scheint es, dass das Rosinenpicken einer Lösung so nahe kommt, wie sie verfügbar ist. Vielen Dank für Ihre Zeit! –

2

Es gibt eine Lösung für Ihren Fall, ohne in einen völlig anderen Workflow zu wechseln.

In Bezug auf das Holen von Korrekturen von Ihrem Hauptzweig in Feature-Verzweigungen, wie Sie bereits herausgefunden haben, ist das Beste, diese bestimmten commits zu wählen. Aber ich bevorzuge Zweigstellen auch für Hotfixes anstelle der Befestigung in der Hauptleitung, auf diese Weise kann ich diese Fixes in jede von ihnen geblockte Funktion ordnungsgemäß zusammenführen.

Um den Verlauf der Feature-Entwicklung so sauber und linear wie möglich zu halten, müssen alle Mitarbeiter git pull --rebase verwenden, um Updates zu erhalten, sodass keine sinnlosen Merge-Commits in den Weg kommen.

Wenn Sie eine kollaborative Feature-Verzweigung immer noch über den aktuellen Hauptentwicklungszweig (für kontinuierliche Integrationstests oder andere Zwecke) rebasen oder den Verlauf auf andere Weise neu schreiben möchten, können Sie dies tun, sobald die Funktion abgeschlossen ist vor dem Zusammenführen zu Hauptzweig, aber Sie sollten es in einem neuen separaten lokalen/privaten Zweig tun.

Hier ist, wie die Informationen auf Ihre Thema Änderungen neu erstellen (überspringen kirsch Picks) in einem neuen Zweig vom Master:

$ git checkout -b feature_final feature # jump to a new branch for grooming 
$ git rebase [-i] master    # rebase topic changes onto master 

Von dort bis zu Ihnen, was mit dem rebased Zweig zu tun -push stromaufwärts für QA oder direkt zum Master zusammenführen (mit --no-ff, wenn Sie es in der Historie explizit machen wollen).