2013-05-02 25 views
12

Ich habe mir When do you use git rebase instead of git merge? angesehen Aber ich möchte sicher sein, über welche Lösung in diesem Fall zu wählen: Ich möchte ein neues Feature auf Master implementieren, damit ich es zu einem neuen Zweig Funktionszweig Ich mache 10 Commits auf Feature, während jemand anderes andere Commits auf Master macht.Git - Merge vs Rebase

Meine Frage ist, wenn ich meinen Zweig für Testzwecke vom Master getrennt halten möchte, aber ich muss es mit den neuen Master-Commits testen. Also, sollte ich Master in Feature (und nicht Feature in Master, die meine Änderungen auf Master vor meinem Test anwenden würde) zusammenführen oder eine Rebase?

+0

Das ist für eine Debatte. Ich würde eine Rebase machen. – 1615903

+0

Die erste Antwort in dem Link, den Sie angeschaut haben, gibt Ihnen eine klare Empfehlung, Ihren Anwendungsfall zu rebasen. – mah

+0

Verwenden Sie in der Zukunft bitte aussagekräftigere Titel, die das Problem, das Sie lösen möchten, klarer erklären. –

Antwort

5

Warum nicht einen neuen Zweig erstellen die fusionierte Version zu testen? Zum Beispiel:

git checkout -b test-merged-feature master 
git merge my-feature 
[... do your testing ..] 

Es gibt keinen Grund besonders einen rebase hier zu tun, aber wenn Sie nicht bereits Feature-Zweig geschoben, das wäre auch in Ordnung sein. In diesen Fragen geht es zum Teil darum, wie Sie möchten, dass Ihre Geschichte aussieht - manche Menschen mögen es nicht, viele Zusammenführungen zu sehen; einige bevorzugen es, um zu verfolgen, welche Commits zu einem bestimmten Merkmal beigetragen haben.

+0

Ich nehme mit einem „dev“ Zweig die Eigenschaften zusammen zu testen und es dann für die Produktion auf Master setzen in diesem Fall eine gute Praxis wäre? Bei der Frage "Merge vs Rebase" geht es also nur darum, wie Ihre Commits-Historie aussehen soll. – user2316341

+0

Ich stimme dieser Option (in einem neuen Zweig zusammenführen), also +1. Aber ich befürworte immer noch eine Antwort in meiner Antwort unten. – VonC

+0

@ user2316341 ein Zweig "dev" macht Sinn, wenn Sie mehrere Feature-Zweige integrieren (zusammenführen) müssen, um zu sehen, ob sie alle zusammen funktionieren. Aber wenn Sie nur einen Feature-Zweig gleichzeitig haben ...es fügt Komplexität für wenig Gewinn hinzu. – VonC

5

Es sei denn, Sie haben bereits Ihre Filiale geschoben (und Sie wissen, andere haben Ihre Repo geklont), würde ich immer noch eine Rebase, wie ich in meiner eigenen Antwort von "git rebase vs git merge" erwähnt.

Test oder nicht, ich mache in der Regel eine Rebase jedes Mal, wenn ich meine lokale Repo aktualisieren (Git fetch), um sicherzustellen, die endgültige Zusammenführung (Feature bis master) wird ein Schnellvorlauf sein.

Es geht also nicht nur darum, wie Ihre Geschichte aussieht, sondern vor allem darum, sicherzustellen, was Sie entwickeln, basiert nicht auf einer alten Version von master, und arbeiten im Laufe der Zeit gegen die neuesten Entwicklungen in master .

+0

Du sagst also, dass ich die meiste Zeit immer Rebase machen sollte, aber nicht wenn ich meinen Zweig schon geschoben habe. Warum das ? Was ist das Problem, die Branche bereits verdrängt zu haben? – user2316341

+0

@ user2316341 eine Rebase die Geschichte von SHA1 umschreiben. In diesem Fall müssten Sie "push --force" drücken, um die Historie zu ersetzen, die bereits durch die neue, die durch die Rebase generiert wurde, ersetzt wurde. Wenn niemand Ihren Zweig benutzt, ist das keine große Sache, und Rebase ist bei weitem die einfachste und sicherste Lösung, künstlich eine Zusammenführung zu einem Zwischenzweig hinzuzufügen. – VonC

+0

@ user2316341 siehe http://stackoverflow.com/a/8940299/6309 als ein Beispiel für das Problem. – VonC

5

In Workflows Ich bin vertraut, gibt es einen Stamm und Integration Zweig (s), und verfügen über Niederlassungen

Ich habe gegenüber den ‚Derivat‘ Zweige worden rebaseing. (durch Ableitungen, ich meine die Richtung AWAY vom Stamm), und verschmilzt zu den Integrationszweigen.

Ich mag, dass ich immer in einem Zweig arbeitet, die die gleiche Geschichte wie der Zweig hat ich mit eingliedern werde. Ich mag, dass die Zusammenführung zu einem Schnellvorlauf wird, also weiß ich, dass das, was ich gerade zusammengeführt habe, genau das ist, was ich gerade in meinem Zweig getestet habe.

0

Wenn sich zwei Entwickler zum selben Repo verpflichten (dies führt zu einem Konflikt), können Sie die beiden Commits zusammenführen, indem Sie einen Merge-Commit erstellen, oder Sie können einen der Commits (Ihren) auf den anderen Commit setzen. Es ist immer besser, ein Rebase durchzuführen, anstatt ein Merge-Commit zu generieren.

Verwandte Themen