Bester (und sicherster) Weg, eine Git-Verzweigung in den Master zu integrieren
Einen neuen Zweig von master
erstellt wird, nennen wir es test
.
Es gibt mehrere Entwickler, die entweder verpflichten master
erstellen oder andere Zweige und später verschmelzen master
.
Sagen wir, die Arbeit an test
ist, mehrere Tage, und Sie wollen ständig test
aktualisiert begeht innen master
.
Ich tun würde git pull origin master
aus test
.
Frage 1: Ist das der richtige Ansatz? Andere Entwickler könnten leicht haben gearbeitet auf den gleichen Dateien wie ich gearbeitet habe, btw.
Meine Arbeit auf test
ist getan und ich bin bereit, es zu verschmelzen wieder zu master
. Hier sind die zwei Möglichkeiten, die ich denken kann:
A:
git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test
B:
git checkout test
git pull origin master
git checkout master
git merge test
Ich bin nicht mit --rebase
weil von meinem Verständnis, Stellungswechsel, erhalten die änderungen von master
- und stack-mine auf der Oberseite, daher könnte es überschreiben änderungen, die andere Menschen gemacht.
Frage 2: Welche dieser beiden Methoden ist die richtige? Was ist der Unterschied da?
Das Ziel ist, um meine test
branch aktualisiert die Dinge im master
und später konnte ich Sie Zusammenführen wieder in master
in der Hoffnung zu halten, die timeline so linear wie möglich.
InformationsquelleAutor der Frage moe | 2011-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie würde ich dies tun
Wenn ich einen lokalen branch aus einem entfernten, ich fühle mich nicht wohl mit der Zusammenführung der anderen Zweige als diese mit der Fernbedienung. Ich würde auch nicht drücken meine änderungen, bis ich glücklich bin mit dem, was ich möchte zu schieben und auch ich würde nicht schieben Dinge auf alle,, die sind nur für mich und meine lokalen repository. In Ihrer Beschreibung scheint es, dass
test
ist nur für Sie? Also kein Grund um es zu veröffentlichen.git immer bestrebt, Ihre und andere änderungen, und so wird
--rebase
. Ich glaube nicht, dass ich erklären kann, ist es angemessen, so haben Sie einen Blick auf das Git-Buch - Rebasierung oder git-ready: Intro in Rebase für eine kleine Beschreibung. Es ist ein ziemlich cooles featureInformationsquelleAutor der Antwort KingCrunch
Dies ist eine sehr praktische Frage, aber alle Antworten sind nicht praktisch.
Wie
Dieser Ansatz hat zwei Fragen:
Es ist unsicher, weil wir nicht wissen, ob es irgendwelche Konflikte zwischen den test-branch und den master-Zweig.
Wäre es "squeeze" alle test verpflichtet sich, die in einer merge-commit auf master; das ist zu sagen auf dem master-branch, den wir nicht sehen können, die alle änderungsprotokolle zu den test-Zweig.
So, wenn wir vermuten, es würde einige Konflikte können wir mit folgenden git-Operationen:
Test
merge
vorcommit
zu vermeiden fast-forward commit von--no-ff
,Wenn der Konflikt aufgetreten ist, können wir
git status
zu überprüfen, die details über die Konflikte und versuchen Sie zu lösenEinmal lösen wir die Konflikte, oder wenn es keinen Konflikt gibt, wir
commit
undpush
SieAber auf diese Weise verlieren Sie den änderungsverlauf protokolliert im "test" - Zweig, und es würde die master-Zweig zu schwer für andere Entwickler zu verstehen, die Geschichte des Projekts.
Also die beste Methode ist, haben wir die Verwendung
rebase
stattmerge
(nehme an, wenn in dieser Zeit haben wir gelöst Zweig Konflikte).Folgenden ist ein einfaches Beispiel für die erweiterten Operationen entnehmen Sie bitte http://git-scm.com/book/en/v2/Git-Branching-Rebasing
Yep, wenn du Oberteil gemacht, alle Test-branch-commits verschoben werden auf den Kopf des Master Zweiges. Der große Vorteil der rebasierung ist, dass Sie eine lineare und viel sauberer Projekt-Geschichte.
Die einzige Sache, die Sie vermeiden müssen, ist: verwenden Sie niemals
rebase
auf öffentlichen Zweig, wie der master-Zweig.wie folgenden Betrieb:
nie diese Operationen.
Details für https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing
Anhang:
InformationsquelleAutor der Antwort John Yin
Weder einen Stellungswechsel, noch einen merge überschreiben soll jemand die änderungen (es sei denn, Sie wählen, dies zu tun, wenn die Lösung eines Konflikts).
Ist die übliche Vorgehensweise bei der Entwicklung ist
Wenn Sie bereit sind, merge zurück in den master,
Wenn Sie besorgt über brechen etwas auf die merge
git merge --abort
ist für Sie da.Mit drücken und ziehen dann als Mittel der Zusammenführung ist albern. Ich bin mir auch nicht sicher, warum Sie schieben test zu origin.
InformationsquelleAutor der Antwort raylu
Neben KingCrunches Antwort, schlage ich
Die Sie gemacht haben könnte viele commits in den anderen Zweig, die nur einen commit in den master branch. Halten Sie die commit-Geschichte so sauber wie möglich, möchten Sie vielleicht zu zerquetschen alle Ihre übertragungen aus dem test-Zweig in einen commit in den master-Zweig (siehe auch: Git: squash ist oder nicht zum squash?). Dann können Sie auch schreiben der commit-Nachricht zu etwas sehr ausdrucksstark. Etwas, das einfach zu Lesen und zu verstehen, ohne zu Graben in den code ein.
edit: vielleicht interessiert
Damit auf GitHub, ich am Ende tut das folgende für einen feature-branch
mybranch
:Holen Sie sich die neuesten, von Herkunft
Finden Sie die merge-base-hash:
Stellen Sie sicher, dass nur die erste
pick
, der rest ists
:Wählen Sie als Nächstes eine sehr gute commit-Nachricht und drücken Sie auf GitHub. Stellen Sie die pull-Anforderung.
Nach dem Zusammenführen der pull-request, Sie können es löschen, lokal:
und auf GitHub
InformationsquelleAutor der Antwort Martin Thoma
Dies ist der workflow, den ich bei meiner Arbeit mit dem team. Das Szenario ist wie du Sie beschrieben hast. Erste, wenn ich fertig bin arbeiten auf
test
ich Stellungswechsel mit master zu ziehen, was wurde Hinzugefügt, um master-während der Zeit habe ich gearbeitet, auf dertest
Zweig.git pull -r upstream master
Diese ziehen, die Veränderungen zu meistern, da Sie Gabel-die
test
Filiale und wenden Sie Sie, und wenden Sie dann die änderungen, die Sie vorgenommen haben, zu testen "über" den aktuellen Stand der Meister. Gibt es Konflikte hier, wenn die anderen Leute gemacht haben, änderungen an den gleichen Dateien, die du bearbeitet hast im test. Wenn ja, haben Sie, um Sie zu beheben, manuell, und Begehen. Sobald Sie das getan haben, werden Sie gut zu wechseln, um den master branch und mergetest
mit keine Probleme.InformationsquelleAutor der Antwort djheru
Nach der Zusammenführung, wenn die Datei geändert wird, dann, wenn Sie Zusammenführen, es werden durch die Fehler von "Konflikte Lösen"
So, dann müssen Sie zuerst beheben Sie alle Konflikte, dann haben Sie wieder verpflichten, alle Ihre änderungen, und drücken Sie dann
Ist dies besser tun, die getan hat, änderungen in den test-Zweig, weil er wusste, welche änderungen er gemacht hat.
InformationsquelleAutor der Antwort Vinay Sikarwar