Aktualisieren des aktuellen Zweigs vom übergeordneten Zweig

71

Ich habe einen neuen Git-Zweig Baus einem Zweig Amit Tracking-Option erstellt.

Wenn der AZweig durch wenige Commits aktualisiert wird, möchte ich auch die Commits auf ziehen B, damit ich den Überblick behalten kann und manchmal später keine großen Änderungen vornehmen muss.

Wie soll ich das angehen? Wird es automatisch in Git gemacht?

user482594
quelle
Fügt das Verfolgen von Zweigen tatsächlich etwas anderes hinzu, als zu sagen, dass Zweig A von Zweig A gespeist wird?
Philip P.
5
Sie sollten Ihren Zweig B mit A neu gründen.
Bilbo Beutlin

Antworten:

88

Dies erfolgt nicht automatisch. Sie müssen Ihre Änderungen manuell von A nach B zusammenführen, was ziemlich einfach ist. Wechseln Sie einfach zu Zweig B und tun Sie es

git merge A

Dadurch werden Ihre Änderungen automatisch von A nach B zusammengeführt. Solange Sie keine Konflikte haben, werden alle Änderungen in A als in B zusammengeführt markiert. Eine gängige Vorgehensweise besteht darin, tägliche Zusammenführungen vorzunehmen, dies hängt jedoch davon ab über die Anzahl der Benutzer / Commits, die Ihren Zweig verwenden.

HackerGil
quelle
Wenn Sie davon sprechen, dass A ein entfernter Zweig und B ein lokaler Zweig ist, reicht Git Pull aus
HackerGil
1
Wenn ich git A aus Zweig B zusammenführe und mindestens 1 Datei in Konflikt steht, erscheinen Dateien in den Änderungen (inszeniert)! Nachdem ich den Konflikt gelöst habe, bin ich gezwungen, bereits festgeschriebene Änderungen vorzunehmen. Was ist falsch?
Romain Vincent
git merge origin A sollte dies weiter verbessern
Aditya Rewari
5

Angenommen, Ihr Aufruf zum Erstellen Bwar git clone /path/to/server/A, müssen Sie nur eine git pullund Sie sind fertig. So git pullfunktioniert: zuerst holt ihm die Änderungen von der vorgeschalteten (die getrackten Niederlassung Ain Ihrem Fall), dann verschmelzen s diese Änderungen in den Zweig , dass Spuren der getrackten Zweig ( Bin Ihrem Fall).

Das Git-Buch und Pro Git diskutieren dieses Thema ausführlich, daher sind sie es wert, gelesen zu werden (wenn Sie es nicht eilig haben, lesen Sie auch den Rest).

eckes
quelle
Hey, wundere mich nur. Ich bin nicht sicher, ob ich tatsächlich Zweig B durch Klonen von A erstellt habe. Ich habe gerade einen Zweig git branch Amit einer zufälligen Option erstellt, denke ich. Also, wenn ich nur Git Pull mache, beschwert sich Git darüberYou asked me to pull without telling me which branch you want to merge with...
user482594
@ user482594: pullwird nur benötigt, wenn Sie Daten von einer Fernbedienung abrufen möchten. Wenn Sie eingeschaltet waren Aund es gerade getan haben git checkout -b B, können Sie einfach merge(während Sie eingeschaltet sind B, tippen git merge A).
eckes
3

Hier ist, wie ich es zum Laufen gebracht habe.

Kurzfassung:

git checkout  feature/mychildbranch

git branch

git checkout  feature/myparentbranch

git pull

git branch

git checkout feature/mychildbranch

git branch

git merge feature/myparentbranch

längere Version (erklärt) Ich werde / * als Kommentare verwenden * /

/* first, make sure you at least have the child branch */
git checkout feature/mychildbranch


/* ok, just show the branches.  make sure at least feature/mychildbranch exists  note the "*" below says "this is the branch i am on" */
git branch
    * feature/mychildbranch
      feature/myparentbranch


/* now checkout the parent branch...note the "switched" happens automatically with the checkout */    
git checkout feature/myparentbranch
    Switched to branch 'feature/myparentbranch'
    Your branch is up to date with 'origin/feature/myparentbranch'.

/* not pull, the pull will occur on the branch you are currently on, which should be feature/myparentbranch at this point */    
git pull
    remote: Enumerating objects: 69, done.
    remote: Counting objects: 100% (55/55), done.
    remote: Compressing objects: 100% (22/22), done.
    remote: Total 22 (delta 17), reused 0 (delta 0)
    Unpacking objects: 100% (22/22), done.
    From https://mygit.hub.com
       96ae0e9..6eb0a03  feature/myparentbranch -> origin/feature/myparentbranch
        * [new branch]      feature/blah blah blah (specific to my stuff only)
       xb99638..x86db6f  master                  -> origin/master
    Updating x6ae0e9..xeb0a03
    Fast-forward
     .../somefileone.txt | 30 ++++++++++++--------
     .../somefiletwo.txt       |  7 +++--
     .../somefilethree.txt  |  6 ++--
     X files changed, Y insertions(+), Z deletions(-)
     create mode 100644 somenewfileone.txt

/* do a git branch just to show that you're on feature/myparentbranch */    
git branch
  feature/mychildbranch
* feature/myparentbranch

/* ok, now (above) you have the latest-greatest feature/myparent, lets do a checkout on the child to switch to the child */    
git checkout feature/mychildbranch
Switched to branch 'feature/mychildbranch'
Your branch is up to date with 'origin/feature/mychildbranch'.

/* another sanity check, show you're on feature/mychildbranch */
git branch
* feature/mychildbranch
  feature/myparentbranch

/* finally, the magic.  do a merge from feature/myparentbranch (which you know is local and up to date because of the voodoo above */    
git merge feature/myparentbranch
Merge made by the 'recursive' strategy.
 .../somefileone.txt | 30 ++++++++++++--------
 .../somefiletwo.txt       |  7 +++--
 .../somefilethree.txt  |  6 ++--
 X files changed, Y insertions(+), Z deletions(-)
 create mode 100644 somenewfileone.txt

Wenn es keine Konflikte gibt, sollten Sie dort sein, wo Sie sein möchten. Wenn es Konflikte gibt, ist das meiner Meinung nach eine ganz neue SOF-Frage / Antwort.

granadaCoder
quelle
git merge origin ASollte mich das davon abhalten, zum Elternzweig zurückzukehren, dort einen Zug zu machen und dann zum Kind zurückzukehren, um den Rest der Dinge zu erledigen
Aditya Rewari
1

Für die Fusion mit den Eltern:

Es ist sehr wichtig, beide Befehle auszuführen:

  1. git fetch [um alle Metadaten abzurufen, die Zweigen zugeordnet sind]
  2. git merge parentBranchName

Nur zu Ihrer Information: Jetzt sehen Sie in Ihrem lokalen Verlauf / Ihren lokalen Protokollen eine Liste der Commits, aber dies wird Ihre Änderungen festschreiben, die dem übergeordneten Zweig in Ihrem lokalen nicht auf Remote-Konto zugeordnet sind.

Führen Sie einfach alle Änderungen auf Remote wie Github aus

  1. Git Push
Rohit Kumar
quelle
0

Im Kinderzweig B können wir das tun

git merge origin A 

Dies würde es mit dem Ursprung der Eltern synchron halten.

Aditya Rewari
quelle