2013-07-25 20 views
29

Ich habe eine Entwicklung Zweig und eine Funktion Zweig in meinem Git-Repo. Ich habe ein Commit für die Entwicklung hinzugefügt und möchte nun, dass das Commit mit meinem Feature-Zweig zusammengeführt wird. Wenn ich dies tueWie git Commits in der Entwicklung Zweig zu einem Feature-Zweig zu verschmelzen

git checkout feature 
git merge develop 

Ich am Ende mit einem Merge-Commit. Da ich neue Commits für die Entwicklung zu meinem Feature-Zweig regelmäßig zusammenführen werde, möchte ich all diese unnötigen Merge-Commits vermeiden. Ich sah dieses answer, das schlug vor, eine git rebase develop zu tun, aber es landet meinen Zweig zurück zu weit zurückspulen und die Rebase schlägt fehl.

Update: Was ich am Ende war tun

git checkout feature 
git merge develop # this creates a merge commit that I don't want 
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want 
git push 

Update: Ich habe gerade bemerkt, dass das Original auf begehen entwickeln wird einen anderen Hash, wenn ich dann auf den Funktionszweig rebase verschmelzen. Ich denke nicht, dass das ist, was ich will, denn schließlich werde ich Feature wieder in Entwicklung zusammenführen und ich denke, das wird nicht nett spielen.

+0

Hmm, ich weiß, dass Sie Ihre Commits zusammen "quetschen" können, wenn Sie Rebase, als eine Möglichkeit, nicht so viele Commits auf Ihrem Zweig haben. Schauen Sie sich http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html an. – Houdini

+4

Rebasing * ist * die Antwort, wenn es für Sie nicht funktioniert, gibt es eine andere Frage, die Sie sich fragen sollten * warum * es funktioniert nicht. – meagar

Antwort

29

Um einen Zweig in einen anderen zu integrieren, müssen Sie entweder zusammenführen oder umbasen. Da es nur sicher ist, Commits, die nirgendwo anders referenziert werden, erneut zu referieren (nicht mit anderen lokalen Zweigen zusammengeführt und nicht an eine entfernte Stelle verschoben), ist es im Allgemeinen besser, zu verschmelzen.

Wenn Ihr Feature-Zweig rein lokal ist, können Sie ihn zusätzlich zur Entwicklung hinzufügen. Es dauert jedoch einige Zeit zu verstehen, wie Rebase funktioniert, und bevor Sie es tun, ist es ziemlich einfach, doppelte oder abgelegte Commits versehentlich zu erzeugen. Merge-Commits können laut aussehen, aber das Zusammenführen ist garantiert immer sicher und vorhersehbar.

Für eine bessere Sicht, versuchen, alles zusammen in einem Diagramm Anmeldung:

git log --all --graph --oneline --decorate 

Es ist auch eine Überlegung wert, ob Sie wirklich Notwendigkeit die Commits auf develop in feature verschmolzen. Oft sind es Dinge, die getrennt bleiben können, bis feature später in develop zusammengeführt wird.

Wenn Sie regelmäßig feststellen, dass Sie develop Code auf feature benötigen, dann könnte dies ein Zeichen dafür sein, dass Ihre Feature-Verzweigungen zu lange dauern. Idealerweise sollten Features so aufgeteilt werden, dass sie unabhängig voneinander bearbeitet werden können, ohne dass eine regelmäßige Integration erforderlich ist.

11

Wenn Sie nur eine von der develop Zweig begehen möchten, können Sie herauspicken es in Ihrem feature Zweig:

git checkout feature 
git cherry-pick -x <commit-SHA1> 

Die begehen wird als eine neue am Anfang Ihrer Niederlassung angewendet werden (vorausgesetzt, es doesn 't erzeugen einen Konflikt), und wenn Sie den feature Zweig wieder zusammenführen, wird Git damit ohne Konflikte fertig werden.