2017-03-05 7 views
3

Ich verwalte ein Git-Repository und nur Schreibzugriff auf den Master-Zweig. Ich habe meinen Kollegen gebeten, seinen eigenen Zweig zu gründen und irgendwelche Änderungen an diesen Zweig zu schieben, und ich werde sie auf den Meister übertragen. Jetzt sind hier meine Szenarien:Git Rebasing Filialen

Mein Kollege überprüft Zweig A und macht mehrere Commits. Ich arbeite weiter in der Meisterbranche. Der Kollege schiebt Änderungen an das Repository und ich rebase sie auf Master. Ich arbeite weiter an Master-Zweig, während mein Kollege arbeitet weiter an A.

Nun ist meine Frage, ob Kollege A nach der Rebase löschen und einen neuen Zweig erstellen oder kann er weiter arbeiten auf A? Muss er den neuen Master mit A zusammenführen, bevor er nach der Rebase weiterarbeitet?

A 
| \ 
| \ 
B D 
| | 
C E 
| /| 
H/F 
| | 
I G 

bearbeiten als Antwort auf Tims Antwort für die Formatierung:

Dies ist aber nicht mein Szenario. branchA integriert niemals Änderungen vom Master. Also im Grunde:

master:  ... A -- B 
branchA: ... A -- C 

und dann:

master:  ... A -- B -- C' 
branchA  ... A -- C 

Hinweis branchA bleibt unverändert. Ist es jetzt sicher, weiter an branchA zu arbeiten?

+0

Sie scheinen sehr verwirrt darüber, was Rebasing und Merging sind. In Ihrem aktualisierten Diagramm hat _no_ rebasing stattgefunden. Sie sollten entweder _rebase_ von Ihrer Frage streichen oder uns sagen, was Sie hier wirklich tun. –

+0

Wie stellen Sie fest, dass kein Rebasing stattgefunden hat? Ich habe die Commits von 'branchA' auf' master' rebasiert, wodurch 'C'erzeugt wurde? –

+0

Das ist keine Rebase, es ist entweder eine Zusammenführung oder ein Cherry-Pick. Und normalerweise würden Sie nicht 'Master' auf' branchA' rebasieren, das ist komisch. Sie würden "branchA" auf "master" umlenken und dann "master" mit "branchA" vorspulen. Meine Antwort erklärt das recht gut. –

Antwort

1

Ihr Kollege sollte in der Lage sein, den gleichen Zweig weiter zu verwenden, nachdem Sie mit den Änderungen von vorspulen master. Der Grund dafür ist, dass, unmittelbar nachdem Ihr Kollege eine Bestätigung von branchA über master und eine schnelle Weiterleitung von master mit eigenen Commits abgeschlossen hat, diese zwei Zweige zu diesem Zeitpunkt identisch sein sollten. Beachten Sie, dass dies die umgekehrte Situation ist, was nach dem Synchronisieren über eine Zusammenführung passiert. In diesem Fall würden Sie höchstwahrscheinlich den Feature-Zweig löschen und mit einem neuen Zweig erneut verzweigen.

Betrachten Sie den folgenden einfachen Workflow, die Rebasieren verwendet:

master: ... A 
branchA: ... A 

Sowohl master und branchA jeweils eine Festschreibung erhalten:

master: ... A -- B 
branchA: ... A -- C 

Jetzt branchA Rebases auf master:

master: ... A -- B 
branchA: ... A -- B -- C' 

Beachten Sie, dass ich Laboratorium habe Elle das einzigartige Commit von branchA oben mit einem Apostroph, weil es ein neues Commit ist, das jedoch wahrscheinlich dem ursprünglichen Commit C eng ähneln würde.

Jetzt spulen wir master mit den Änderungen von branchA vor. Wir können dies tun, weil nach der Rebase branchA ist voraus von master.Dies lässt uns mit:

master: ... A -- B -- C' 
branchA: ... A -- B -- C' 

Und in diesem genauen Moment, sowohl featureA und master sind im Gleichschritt miteinander. Wir können spülen und wiederholen, weil wir jetzt im Wesentlichen wieder da sind, wo wir angefangen haben.

+0

Dies ist jedoch nicht mein Szenario. branchA integriert niemals Änderungen vom Master. Also im Grunde: Master: ... A - B branchA: ... A - C und dann: Master: ... A - B - C‘ branchA ... A - C Hinweis 'branchA' bleibt unverändert. Ist es jetzt sicher, weiter an "branchA" zu arbeiten? –

0

Technisch, da seine Branche unverändert bleibt, kann er weiter auf der Branche arbeiten. Das heißt, da Sie an Master arbeiten, werden Ihre jeweiligen Codebasen divergieren, was wahrscheinlich zu immer mehr Konflikten während der Umbasierung führen wird. Wenn Sie entscheiden, dass Sie Änderungen vom Master in seine Branche einbringen möchten, empfehle ich, seinen Zweig zu verschrotten und einen neuen zu erstellen, anstatt den Master auf seinen Zweig zu verschmelzen.

Meine persönliche Meinung ist, dass Sie seine Niederlassung in Ihre anstelle von Rebasing zusammenführen sollten. So können Sie hin und her verschmelzen, um immer auf dem neuesten Stand zu sein. Aber ich merke, dass Merge vs Rebase teilweise eine Frage des Geschmacks ist.