wake-up-neo.com

Entwicklungszweig mit Master zusammenführen

Ich habe zwei Zweige, nämlich master und development in einem GitHub-Repository. Ich mache meine ganze 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 Zweig development in den master einbinden. Mein aktueller Ansatz ist:

git checkout master 
git merge development
git Push -u Origin master 

Bitte lassen Sie mich wissen, ob das von mir verfolgte Verfahren korrekt ist.

581
Pawan

Generell möchte ich master zuerst mit der development zusammenführen, damit ich im Konfliktfall den development-Zweig selbst auflösen kann und meine master sauber bleibt.

(on branch development)$ git merge master
(resolve any merge conflicts if there are any)
git checkout master
git merge development (there won't be any conflicts now)

Es gibt keinen großen Unterschied zwischen den beiden Ansätzen, aber ich habe manchmal bemerkt, dass ich den Zweig nach dem Zusammenführen noch nicht in master zusammenführen möchte, oder dass noch mehr Arbeit zu erledigen ist, bevor diese möglich sind zusammengeführt, so neige ich dazu, master bis zum endgültigen Zeug unberührt zu lassen.

BEARBEITEN: Aus Kommentaren

Wenn Sie nachverfolgen möchten, wer wann die Zusammenführung durchgeführt hat, können Sie beim Zusammenführen das Flag --no-ff verwenden. Dies ist im Allgemeinen nur beim Zusammenführen von development in master (letzter Schritt) hilfreich, da Sie master möglicherweise mehrfach in development (erster Schritt) in Ihrem Workflow zusammenführen müssen, und das Erstellen eines Commit-Knotens dafür möglicherweise nicht sehr nützlich ist.

git merge --no-ff development
893
Sailesh

Persönlich ist meine Herangehensweise Ihrer, mit ein paar mehr Ästen und einigen Kompromissen beim Commit, wenn sie zurück zum Master gehen.

Einer meiner Kollegen mag es nicht, die Filiale so sehr zu wechseln, und bleibt in der Entwicklungsbranche, ähnlich wie die folgenden, die alle aus der Entwicklungsbranche ausgeführt werden.

git fetch Origin master

git merge master

git Push Origin development:master

Die erste Zeile stellt sicher, dass er Upstream-Commits hat, die seit der letzten Aktualisierung seines lokalen Repositorys zu meistern sind.

Der zweite zieht diese Änderungen (falls vorhanden) vom Master in die Entwicklung

Der dritte drückt den Entwicklungszweig (jetzt vollständig mit Master verschmolzen) auf Origin/Master.

Ich habe vielleicht etwas falsch an seinem grundlegenden Workflow, aber das ist der Hauptaspekt.

78
David Culp

Es wäre großartig, wenn Sie den Git Flow-Workflow verwenden können. Es kann leicht Entwicklungszweig in Master zusammenführen.

Sie möchten einfach die hier erwähnte Git Flow-Anweisung befolgen:

http://danielkummer.github.io/git-flow-cheatsheet/

schritte:

  • richten Sie das Git Flow-Projekt ein 
  • zweige schaffen und alles zusammenführen, um sich zu entwickeln
  • den Befehl "git flow release start" ausführen
  • geben Sie dann eine aussagekräftige Nachricht für die Veröffentlichung an
  • den Befehl "git flow release finish" ausführen
  • es wird alles zusammenführen, um den Zweig zu beherrschen, und den Zweig in Master zu ändern.
  • führen Sie den Befehl "git Push" aus, um die Änderungen im Remote-Master zu veröffentlichen.

Überprüfen Sie den obigen Link für weitere Informationen.

18
Harsha

Erklärung von unten für diejenigen, die ohne Kenntnis von Zweigen hierher gekommen sind.

Grundlegende Logik für die Entwicklung von Hauptzweigen ist: Sie arbeiten nur an anderen Zweigen und verwenden Master nur, um andere Zweige zusammenzuführen.

Sie beginnen auf diese Weise einen neuen Zweig zu erstellen:

1) Klonen Sie das benötigte Repository in Ihrem Webstamm:

$ cd /var/www
$ git clone [email protected]:user_name/repository_name.git

2) Erstellen Sie einen neuen Zweig. Es enthält die neuesten Dateien Ihres Master-Zweig-Repositorys

$ git branch new_branch

3) Ändern Sie den Git-Zweig in die neue_Branche

$ git checkout new_branch

4) Kodieren, wie üblich ...

$ git add .
$ git commit -m “Initial commit”
$ git Push (pushes commits only to “new_branch”)

5) Wenn der Job in diesem Zweig abgeschlossen ist, fügen Sie ihn mit dem Zweig "Master" zusammen:

$ git merge master
$ git checkout master (goes to master branch)
$ git merge development (merges files in localhost. Master shouldn’t have any  commits ahead, otherwise there will be a need for pull and merging code by hands!)
$ git Push (pushes all “new_branch” commits to both branches - “master” and “new_branch”)
17
Gediminas

Ja, das ist richtig, aber es sieht aus wie ein sehr einfacher Workflow, in dem Sie Änderungen nur zwischenspeichern, bevor sie für die Integration bereit sind. Sie sollten in fortgeschrittenere Workflows die git unterstützt. Der Zweigzweig -Ansatz, mit dem Sie parallel an mehreren Features arbeiten können, oder der Graduierungsansatz , der Ihren aktuellen Workflow etwas erweitert.

8
Sergiu Dumitriu

git Pull (aktueller Entwicklungszweig)

git Checkout-Master 

git ziehen

git Merge Entwicklung

git Drücken Sie den Origin-Master

7

Wenn Sie mit Mac oder Ubuntu arbeiten, wechseln Sie in den Arbeitsordner der Zweigstelle. Im Terminal 

nehmen wir an, harisdev ist der Filialname. 

git checkout master

wenn nicht oder nicht festgeschriebene Dateien vorhanden sind, wird ein Fehler angezeigt, und Sie müssen alle nicht erfassten oder nicht festgeschriebenen Dateien festschreiben oder löschen. 

git merge harisdev 

git Push Origin master

Ein letzter Befehl, um den Zweig zu löschen. 

$ git branch -d harisdev
4
Haris Np

So mache ich es normalerweise. Stellen Sie zunächst sicher, dass Sie bereit sind, Ihre Änderungen in master einzufügen.

  1. Prüfen Sie mit einem git fetch, ob die Entwicklung mit den neuesten Änderungen von Ihrem Remote-Server auf dem neuesten Stand ist.
  2. Sobald der Abruf abgeschlossen ist, git checkout master.
  3. Stellen Sie sicher, dass der Master-Zweig über die neuesten Updates verfügt, indem Sie git pull ausführen.
  4. Wenn die Vorbereitungen abgeschlossen sind, können Sie die Zusammenführung mit git merge development beginnen.
  5. Drücken Sie die Änderungen mit git Push -u Origin master und Sie sind fertig.

Mehr zum Thema git - Zusammenführen finden Sie im Artikel.

4
Nesha Zoric

Schritt 1

Erstellen Sie einen neuen "dev" -Zweig, in dem Ihre lokalen Git-Dateien mit dem Remote-Server synchronisiert sind, der "dev" -Zweig jedoch noch nicht vorhanden ist.

git branch dev # create
git checkout dev # switch
# No need to git add or git commit, the current
# branch's files will be cloned to the new branch by-default.
git Push --set-upstream Origin dev # Push the "dev" branch to the remote.

Schritt 2

Nehmen Sie Ihre Änderungen am Zweig "dev" vor (Ihren aktuellen Status, wenn Sie Schritt 1 befolgen), bestätigen Sie und legen Sie sie dem entfernten Zweig "dev" vor.

git add .
git commit -S -m "my first commit to the dev branch" # remove the -S if you're not "secure", secure = when you already setup crypto private and public keys (i.e "verified" green sign in github)
git Push -u Origin dev # Push the changes to the remote, -u Origin dev is optional but good to use.

Schritt 3

Fügen Sie Ihren "dev" -Zweig in den "Master" ein.

git checkout dev # switch to "dev" branch if you're not already.
git merge master # optionally, this command is being used to resolve any conflicts if you pushed any changes to your "master" but "dev" doesn't have that commit.
git checkout master # switch to "master", which is the branch you want to be merged.
git merge --no-ff dev # merge the "dev" branch into the "master" one.
4
kataras

1) Prüfen Sie den git-Status in der Zweigentwicklung mit folgendem Befehl:

git status

Es sollte keinen nicht festgeschriebenen Code geben. Wenn ja, geben Sie Ihren Code in den Zweig "Entwicklung" ein:

git add *

git commit -m "My initial commit message"

git Push Origin Development

2) Führen Sie im Entwicklungszweig die folgenden zwei Befehle aus:

git branch -f master HEAD

git Push -f Origin master

Es wird Ihren Entwicklungszweigcode an den Hauptzweig übertragen.

3

Basierend auf @Sailesh und @DavidCulp:

(on branch development)
$ git fetch Origin master
$ git merge FETCH_HEAD
(resolve any merge conflicts if there are any)
$ git checkout master
$ git merge --no-ff development (there won't be any conflicts now)

Mit dem ersten Befehl stellen Sie sicher, dass Sie alle Upstream-Commits für den Remote-Master festgelegt haben. Die Antwort von Sailesh würde nicht auftreten.

Die zweite führt eine Zusammenführung durch und erzeugt Konflikte, die Sie dann lösen können.

Danach können Sie den Master abschließen, um zum Master zu wechseln.

Dann mischen Sie den Entwicklungszweig auf den lokalen Master. 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 festlegen und verschieben.

Durch dieses Verfahren wird sichergestellt, dass es ein Zusammenführungsengagement von der Entwicklung zum Master gibt, das die Benutzer sehen können. Wenn sie sich also den Entwicklungszweig ansehen, können sie die einzelnen Verpflichtungen sehen, die Sie während der Entwicklung für diesen Zweig gemacht haben.

Optional können Sie das Zusammenführungs-Commit vor dem Push-Befehl ändern, wenn Sie eine Zusammenfassung der Aktivitäten im Entwicklungszweig hinzufügen möchten.

BEARBEITEN: meine ursprüngliche Antwort schlug einen git merge master vor, der nichts getan hat. Es ist besser, git merge FETCH_HEAD nach dem Abrufen des Origin/Masters auszuführen

2
Cisco

Sobald Sie den Entwicklungszweig ausgecheckt haben, ...

 git add .
 git commit -m "first commit"
 git Push Origin dev
 git merge master

 git checkout master 
 git merge dev
 git Push Origin master 
1
Tiago Medici

Wenn Sie Gerrit verwenden, funktionieren die folgenden Befehle einwandfrei.

git checkout master
git merge --no-ff development

Sie können mit der Standard-Festschreibungsmeldung speichern. Stellen Sie sicher, dass die Änderungs-ID generiert wurde. Sie können den folgenden Befehl verwenden, um dies sicherzustellen.

git commit --amend

Dann drücken Sie mit dem folgenden Befehl.

git Push Origin HEAD:refs/for/refs/heads/master

Möglicherweise wird eine Fehlermeldung wie die folgende angezeigt.

! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)

Um dies zu beheben, muss der Gerrit-Projektadministrator in Gerrit einen weiteren Verweis mit dem Namen "refs/for/refs/heads/master" oder "refs/for/refs/heads/*" erstellen (der in Zukunft alle Zweige abdecken wird). Erteilen Sie dann dieser Referenz die Berechtigung "Push Merge Commit" und bei Bedarf die Berechtigung "Submit", um die GCR einzureichen.

Versuchen Sie nun den obigen Push-Befehl erneut und er sollte funktionieren.

Credits:

https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit

https://stackoverflow.com/a/21199818/3877642

0

Ich denke die einfachste Lösung wäre

    git checkout master
    git remote update
    git merge Origin/Develop -X theirs
    git commit -m commit -m "New release"
    git Push --recurse-submodules=check --progress "Origin" refs/heads/Master

Dies bewahrt auch die Geschichte aller in Gebrauch befindlichen Zweige

0
Vishal