2621 Stimmen

Wie führe ich einen Git-Zweig sicher in Master zusammen?

Ein neuer Zweig von master erstellt wird, nennen wir es test .

Es gibt mehrere Entwickler, die sich entweder zu master oder andere Zweige erstellen und später in master .

Sagen wir, die Arbeit an test mehrere Tage in Anspruch nimmt und Sie möchten kontinuierlich die test aktualisiert mit Übertragungen innerhalb master .

Ich würde tun git pull origin master de test .

Frage 1: Ist dies der richtige Ansatz? Andere Entwickler hätten leicht an denselben Dateien arbeiten können, an denen ich gearbeitet habe.


Meine Arbeit an test ist fertig und ich bin bereit, sie wieder mit master . Hier sind die beiden Möglichkeiten, die mir einfallen:

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 benutze nicht --rebase denn nach meinem Verständnis erhält rebase die Änderungen von master und stapeln meine darüber, so dass sie die Änderungen anderer Leute überschreiben könnte.

Frage 2: Welche dieser beiden Methoden ist die richtige? Worin besteht der Unterschied?

Das Ziel dabei ist es, meine test Zweigstelle über die Geschehnisse in der master und später könnte ich sie wieder in master in der Hoffnung, die Zeitachse so linear wie möglich zu halten.

3voto

Julian Punkte 29732

Da der Titel "Der beste Weg" lautet, ist es meiner Meinung nach eine gute Idee, die Geduld Fusionsstrategie.

Von: https://git-scm.com/docs/merge-strategies

Mit dieser Option nimmt sich 'merge-recursive' etwas mehr Zeit, um Fehlzusammenführungen zu vermeiden, die manchmal durch unwichtige übereinstimmende Zeilen (z.B. geschweifte Klammern von verschiedenen Funktionen) entstehen. Verwenden Sie diese Option, wenn die Zweige, die zusammengeführt werden sollen, stark voneinander abweichen. Siehe auch git-diff[1] --patience.

Verwendung:

git fetch
git merge -s recursive -X patience origin/master

Git-Alias

Ich verwende dafür immer einen Alias, z.B. run once:

 git config --global alias.pmerge 'merge -s recursive -X patience'

Jetzt könnten Sie es tun:

git fetch
git pmerge origin/master

3voto

mchavezi Punkte 402

Ich bekomme immer Merge-Konflikte, wenn ich nur git merge feature-branch . Das scheint bei mir zu funktionieren:

git checkout -b feature-branch

Eine Reihe von Codeänderungen vornehmen...

git merge -s ours master 

git checkout master

git merge feature-branch

ou

git checkout -b feature-branch

Eine Reihe von Codeänderungen vornehmen...

git checkout master

git merge -X theirs feature-branch

0voto

Masoud Mokhtari Punkte 2306

Sie müssen den Zweig ausgecheckt haben, um zu pullen, da pullen bedeutet, in den Master zusammenzuführen, und Sie brauchen einen Arbeitsbaum, um ihn zusammenzuführen.

git checkout master
git pull

Es ist nicht nötig, zuerst auszuchecken; rebase macht das Richtige mit zwei Argumenten

git rebase master test  

git checkout master
git merge test

git push überträgt standardmäßig alle Zweige, die hier und auf dem entfernten Server existieren

git push
git checkout test

0voto

shdr Punkte 726

Dies ist von GitLab: Folgen Sie einfach den Anweisungen:

enter image description here

0voto

rhavelka Punkte 2186

Es gibt hier bereits eine Menge guter Antworten. Ich füge nur die Schritte hinzu, die ich mache.

git fetch -p
git checkout master
git rebase origin/master
git checkout test
git rebase master

Erläuterung

git fetch -p wird alle Änderungen abrufen, die seit dem letzten Fetch vorgenommen wurden, und die -p bereinigt Ihre Zweige und löscht alle veralteten Zweige.

git checkout master den Master-Zweig auschecken

git rebase origin/master aktualisiert die master Zweig. Wenn Sie hier einen Zug machen, erhalten Sie das gleiche Ergebnis.

git checkout test den Zweig, in dem Sie Änderungen vorgenommen haben, auschecken

git rebase master aktualisiert die test Zweig mit Änderungen an master . Dadurch werden alle geänderten Dateien zusammengeführt, und wenn es Konflikte bei einer Ihrer Übertragungen gibt, müssen Sie diese auflösen und dann eine git rebase --continue o git rebase --abort

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X