Ich habe nämlich zwei Zweige master
und development
in einem GitHub Repository. Ich mache meine gesamte Entwicklung in der Entwicklungsbranche wie gezeigt.
git branch development
git add *
git commit -m "My initial commit message"
git push -u origin development
Jetzt möchte ich alle Änderungen am development
Zweig in den zusammenführen master
. Mein aktueller Ansatz ist:
git checkout master
git merge development
git push -u origin master
Bitte lassen Sie mich wissen, ob das von mir befolgte Verfahren korrekt ist.
git pull -u
Legt die Upstream-Verfolgung für den Zweig fest (oder für alle Zweige, wenn mehr als einer gedrückt wird). Sobald es eingestellt ist, bleibt die Verfolgung bestehen. Es gibt keinen Grund, es kontinuierlich zu verwenden.Antworten:
Im Allgemeinen verschmelze ich gerne mit
master
derdevelopment
ersten, damit ich bei Konflikten die Lösung in derdevelopment
Filiale selbst lösen kann und meinemaster
Überreste sauber bleiben.Es gibt keinen großen Unterschied zwischen den beiden Ansätzen, aber ich habe manchmal bemerkt, dass ich den Zweig
master
nach dem Zusammenführen noch nicht zusammenführen möchte oder dass noch mehr Arbeit zu tun ist, bevor diese zusammengeführt werden können , also neige ich dazu,master
bis zum letzten Zeug unberührt zu bleiben.EDIT: Aus Kommentaren
Wenn Sie verfolgen möchten, wer wann die Zusammenführung durchgeführt hat, können Sie
--no-ff
beim Zusammenführen das Flag verwenden, um dies zu tun. Dies ist im Allgemeinen nur nützlich beim Einarbeitendevelopment
in diemaster
(letzte Stufe), da müssen Sie möglicherweise verschmelzenmaster
indevelopment
(ersten Schritt) mehrfach in Ihrem Workflow und das Erstellen von einem Commit - Knoten für diese nicht sehr nützlich sein könnte.quelle
--no-ff
Um dies zu beheben, ist eine explizite Zusammenführung zum Master erforderlich.--no-ff
es da. :)git merge --no-ff development
nur dazu, die Verwendung von @ elect zu korrigieren.A->B->C
Meister undA->X->Y
sei dein Entwicklungszweig. Wenn Sie einen Teil einer Datei ändern, inX
der möglicherweise Konflikte mit einer Änderung aufgetreten sindA
, handelt es sich nicht um einen Konflikt, daA
es sich um einen Vorfahren von handeltX
. Informationen zu verlorenen Änderungen finden Sie unter stackoverflow.com/questions/7147680/… , um alle Änderungen wiederherzustellen.Persönlich ähnelt mein Ansatz Ihrem, mit ein paar weiteren Zweigen und einigen Quetschungen von Commits, wenn sie zum Master zurückkehren.
Einer meiner Mitarbeiter mag es nicht so sehr, die Filialen wechseln zu müssen, und bleibt in der Entwicklungsbranche mit etwas Ähnlichem wie den folgenden, die alle aus der Entwicklungsbranche ausgeführt werden.
In der ersten Zeile wird sichergestellt, dass er über alle Upstream-Commits verfügt, die seit der letzten Aktualisierung seines lokalen Repositorys erstellt wurden.
Die zweite zieht diese Änderungen (falls vorhanden) vom Master in die Entwicklung
Der dritte schiebt den Entwicklungszweig (der jetzt vollständig mit dem Master zusammengeführt ist) auf Ursprung / Master.
Ich mag seinen grundlegenden Workflow ein wenig falsch haben, aber das ist das Wesentliche.
quelle
rebase
aktualisieren muss .dev
merge
Erklärung von unten für diejenigen, die ohne Kenntnis der Zweige hierher gekommen sind.
Sie beginnen auf diese Weise, einen neuen Zweig zu erstellen:
1) Klonen Sie das Repository in Ihrem lokalen Verzeichnis (oder erstellen Sie ein neues Repository):
2) Erstellen Sie einen neuen Zweig. Es enthält die neuesten Dateien Ihres Hauptzweig-Repositorys
3) Ändern Sie Ihren aktuellen Git-Zweig in new_branch
4) Codieren, Festschreiben wie gewohnt…
5) Wenn der Job in diesem Zweig beendet ist, führen Sie ihn mit dem Zweig "Master" zusammen:
Update: Ich empfehle dringend, GitKraken zu verwenden, um den visuellen Baum der Änderungen zu sehen und alle Logik und Commits besser zu sehen.
quelle
release
branch our of the erstelltdevelop
. Dann wurde eine Versionshinweisdatei hinzugefügt und festgeschrieben. Dann beendete die Veröffentlichung, die wieder zu beiden verschmilztmaster/develop
. In meinem Hauptzweig wurde jedoch nur ein neu hinzugefügter Versionshinweis hinzugefügt. Es wurden keine anderen Dateien während früherer Entwicklungs-Commits darin aktualisiert.Es wäre großartig, wenn Sie den Git Flow-Workflow verwenden könnten . Es kann Entwicklungszweig leicht in Master zusammenführen.
Befolgen Sie einfach die hier genannten Anweisungen zum Git-Flow:
SCHRITTE:
git flow release start <version_number>
git flow release finish <version_number>
git push
, um die Änderungen auf dem Remote- Master zu veröffentlichen .Weitere Informationen finden Sie auf der Seite - http://danielkummer.github.io/git-flow-cheatsheet/
quelle
quelle
Ja, das ist richtig, aber es sieht nach einem sehr einfachen Workflow aus, bei dem Sie Änderungen nur puffern, bevor sie für die Integration bereit sind. Sie sollten sich erweiterte Workflows ansehen , die Git unterstützt. Vielleicht gefällt Ihnen der Themenzweig- Ansatz, mit dem Sie mehrere Features gleichzeitig bearbeiten können, oder der Abschluss-Ansatz, mit dem Sie Ihren aktuellen Workflow ein wenig erweitern können.
quelle
Wenn Sie einen Mac oder Ubuntu verwenden, wechseln Sie in den Arbeitsordner des Zweigs. Im Terminal
Angenommen, Harisdev ist der Filialname.
Wenn nicht verfolgte oder nicht festgeschriebene Dateien vorhanden sind, wird eine Fehlermeldung angezeigt, und Sie müssen alle nicht verfolgten oder nicht festgeschriebenen Dateien festschreiben oder löschen.
Ein letzter Befehl zum Löschen des Zweigs.
quelle
Schritt 1
Erstellen und wechseln Sie zu einem neuen "dev" -Zweig, in dem Ihre lokalen Git-Dateien mit der Remote synchronisiert sind, der "dev" -Zweig jedoch noch nicht vorhanden ist.
Schritt 2
Nehmen Sie Ihre Änderungen am Zweig "dev" vor (Ihren aktuellen, wenn Sie Schritt 1 ausführen), schreiben Sie sie fest und übertragen Sie sie in den Remote-Zweig "dev".
Schritt 3
Füge deinen "dev" -Zweig in den "master" ein.
quelle
So mache ich es normalerweise. Stellen Sie zunächst sicher, dass Sie bereit sind, Ihre Änderungen in master zusammenzuführen.
git fetch
git checkout master
.git pull
git merge development
git push -u origin master
und Sie sind fertig.Weitere Informationen zum Zusammenführen von Git finden Sie im Artikel.
quelle
1) Überprüfen Sie bei der Zweigstellenentwicklung den Git-Status mit dem folgenden Befehl:
Es sollte keinen nicht festgeschriebenen Code geben. Wenn dies der Fall ist, geben Sie Ihren Code in den Entwicklungszweig ein:
2) Führen Sie im Entwicklungszweig die folgenden zwei Befehle aus:
Es wird Ihren Entwicklungszweigcode an den Hauptzweig weiterleiten.
quelle
-f
ist nicht zu empfehlen.Basierend auf @Sailesh und @DavidCulp:
Der erste Befehl stellt sicher, dass alle Upstream-Commits an den Remote-Master gesendet wurden, wobei die Sailesh-Antwort nicht erfolgen würde.
Der zweite führt eine Zusammenführung durch und erstellt Konflikte, die Sie dann lösen können.
Danach können Sie den Master endgültig auschecken, um zum Master zu wechseln.
Anschließend führen Sie den Entwicklungszweig mit dem lokalen Master zusammen. Das No-ff-Flag erstellt einen Commit-Knoten im Master, damit die gesamte Zusammenführung verfolgt werden kann.
Danach können Sie Ihre Zusammenführung festschreiben und vorantreiben.
Durch dieses Verfahren wird sichergestellt, dass ein Zusammenführungs-Commit von der Entwicklung zum Master vorhanden ist, das die Benutzer sehen können. Wenn sie sich dann den Entwicklungszweig ansehen, können sie die einzelnen Commits sehen, die Sie während der Entwicklung für diesen Zweig vorgenommen haben.
Optional können Sie Ihr Merge-Commit ändern, bevor Sie es verschieben, wenn Sie eine Zusammenfassung der Vorgänge im Entwicklungszweig hinzufügen möchten.
BEARBEITEN: Meine ursprüngliche Antwort schlug eine vor,
git merge master
die nichts tat, es ist besser,git merge FETCH_HEAD
nach dem Abrufen des Ursprungs / Masters zu tunquelle
Sobald Sie den Entwicklungszweig "ausgecheckt" haben, ...
quelle
Wenn Sie Gerrit verwenden, funktionieren die folgenden Befehle einwandfrei.
Sie können mit der Standard-Commit-Nachricht speichern. Stellen Sie sicher, dass die Änderungs-ID generiert wurde. Sie können den folgenden Befehl verwenden, um sicherzustellen.
Drücken Sie dann mit dem folgenden Befehl.
Möglicherweise wird eine Fehlermeldung wie die folgende angezeigt.
Um dies zu beheben, muss der Gerrit-Projektadministrator eine weitere Referenz in Gerrit mit dem Namen "refs / for / refs / Heads / master" oder "refs / for / refs / Heads / *" erstellen (die in Zukunft alle Zweige abdeckt). Erteilen Sie dieser Referenz dann die Berechtigung "Push Merge Commit" und bei Bedarf die Berechtigung "Senden", um die GCR zu senden.
Versuchen Sie nun den obigen Push-Befehl erneut, und es sollte funktionieren.
Credits:
https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit
https://stackoverflow.com/a/21199818/3877642
quelle
Ich denke, die einfachste Lösung wäre
Dadurch bleibt auch die Geschichte aller verwendeten Zweige erhalten
quelle
quelle
pull
zurückzukehren. Es ist auch nicht klar, welchen Wert diese Antwort im Vergleich zu vorhandenen Antworten bietet.