Zusammenführen von 2 Zweigen in GIT


130

Ich habe gerade erst angefangen, GIT zu verwenden und finde es wunderbar, aber ich bin ein wenig verwirrt darüber, was der mergeBefehl tut.

Nehmen wir an, wir haben ein Arbeitsprojekt in der Branche "A".

Ich gehe nach Hause und nehme Änderungen an diesem Zweig vor und speichere ihn als "B". Ein anderer Programmierer nimmt Änderungen an "A" vor und speichert sie als "C".

Gibt es eine Möglichkeit, die beiden Zweige "B" und "C" zusammenzuführen und dann die Änderungen als neuen Zweig zu übernehmen, z. B. "D"?

Oder fehlt der Punkt der Zusammenführung?


Änderungen müssen nicht in einem anderen Zweig gespeichert werden. arbeite ein A und
füge

Ich folge nicht. A wäre auf meinem lokalen Computer, dev1 hätte eine Kopie von A auf seinem Computer und dev2 hätte eine Kopie von A auf seinem Computer. Beide Entwickler nehmen Änderungen vor. Wie füge ich diese Änderungen zusammen?
Dotty

Siehe < kernel.org/pub/software/scm/git/docs/git-pull.html >. Die Entwickler müssen wahrscheinlich zuerst irgendwo ihr Repository pushen / hochladen
stricken Sie den

Antworten:


195

merge wird verwendet, um zwei (oder mehr) Zweige zusammenzubringen.

ein kleines Beispiel:

# on branch A:
# create new branch B
$ git checkout -b B
# hack hack
$ git commit -am "commit on branch B"

# create new branch C from A
$ git checkout -b C A
# hack hack
$ git commit -am "commit on branch C"

# go back to branch A
$ git checkout A
# hack hack
$ git commit -am "commit on branch A"

Jetzt gibt es drei separate Zweige (nämlich AB und C) mit unterschiedlichen Köpfen

Um die Änderungen von B und C wieder auf A zu übertragen, checken Sie A aus (in diesem Beispiel bereits ausgeführt) und verwenden Sie dann den Befehl zum Zusammenführen:

# create an octopus merge
$ git merge B C

Ihre Geschichte wird dann ungefähr so ​​aussehen:

…-o-o-x-------A
      |\     /|
      | B---/ |
       \     /
        C---/

Wenn Sie über Repository- / Computergrenzen hinweg zusammenführen möchten, sehen Sie sich den git pullBefehl an, z. B. vom PC mit Zweig A (in diesem Beispiel werden zwei neue Commits erstellt):

# pull branch B
$ git pull ssh://host/… B
# pull branch C
$ git pull ssh://host/… C

Das bedeutet, dass beide Zweige denselben Code geändert haben. Reparieren Sie die Konflikte git add conflicting_filesund danngit commit
stricken Sie den

Angenommen, die Datei in A enthielt das Wort "Hallo", A änderte sie in "Hallo" und B änderte sie in "Hallo Welt". Was wäre das Ergebnis des Zusammenführens dieser Dateien?
Dotty

Hoppla, ich meine, B hat es geändert und C hat es geändert.
Dotty

Seien Sie vorsichtig mit dem Wort "ändern", das etwas anderes in git bedeutet (Änderung bestehender Commits). Das Ändern einer Datei 'Hallo' in 'HALLO' auf der einen Seite und 'Hallo Welt' auf der anderen Seite führt zu einem Zusammenführungskonflikt
stricken Sie den

19
@dotty: Während git oft scheint wie Magie, kann es nicht wirklich Gedanken lesen - wenn zwei Zweige bilden zwei verschiedene Änderungen an den gleichen Inhalt, nur ein Mensch kann herausfinden , wie sie in Einklang zu bringen. Das ist ein Zusammenführungskonflikt.
Cascabel

47

Wenn Sie Änderungen in SubBranch mit MainBranch zusammenführen möchten

  1. Sie sollten auf MainBranch sein git checkout MainBranch
  2. Führen Sie dann den Befehl zum Zusammenführen aus git merge SubBranch

2
@luckytaxi: Einverstanden, manchmal ist weniger mehr
Marcelo Scofano

Kann ich das rückgängig machen?
Yohanelly

0

Fall: Wenn Sie das standardmäßig erstellte Zusammenführungs-Commit ignorieren müssen , führen Sie die folgenden Schritte aus.

Angenommen, ein neuer Feature-Zweig wird vom Master ausgecheckt, der bereits 2 Commits hat.

  • "Hinzugefügt A", "Hinzugefügt B"

Checkout a new feature_branch

  • "Hinzugefügt C", "Hinzugefügt D"

Der Feature-Zweig fügt dann zwei Commits hinzu ->

  • "E hinzugefügt", "F hinzugefügt"

Geben Sie hier die Bildbeschreibung ein

Wenn Sie nun Änderungen an feature_branch mit master zusammenführen möchten, setzen Sie sich git merge feature_branchauf den Master.

Dadurch werden alle Commits zum Master-Zweig hinzugefügt (4 im Master + 2 in feature_branch = insgesamt 6) + ein zusätzliches Merge-Commit wie 'Merge branch 'feature_branch'', wenn der Master divergiert .

Wenn Sie diese Commits (die in FB vorgenommenen Commits) wirklich ignorieren und die gesamten in feature_branch vorgenommenen Änderungen als einzelne Commits wie 'Integrated feature branch changes into master'Run hinzufügen müssen git merge feature_merge --no-commit.

Mit --no-commit führt es die Zusammenführung durch und stoppt kurz vor dem Erstellen eines Zusammenführungs-Commits. Wir haben alle hinzugefügten Änderungen im Feature-Zweig jetzt im Master und haben die Möglichkeit, ein neues Commit als unser eigenes zu erstellen.

Lesen Sie hier mehr: https://git-scm.com/docs/git-merge

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.