2010-06-12 8 views
9

Ich bin 15 und habe gerade damit begonnen, Source-Control-Systeme zu verwenden, um meinen Code ein wenig besser zu verwalten, also bin ich ein wenig neu in diesem Zeug. Im Moment habe ich dieses Repository:Verhält sich git merge reapply auf einem anderen commit?

[a]---[b]---[d]---[f] master 
     \ 
     \ 
      [c]---[e] develop 

Ich möchte hier aufzuwickeln:

[a]---[b]---[d]---[f]---[g] master 
     \    /
     \   /
      [c]---[e]---/  develop 

wo g äquivalent zu Festschreibungen [c] und [e] auf [f]. Das ist git checkout master; git merge develop, richtig?

+2

15 Jahre alt mit Git, super!+1 – zengr

Antwort

1

Sie möchten git checkout master; git merge develop.

Dies ist, weil git merge den Namen eines Zweigs übernimmt, den Sie in den aktuell ausgecheckten Zweig zusammenführen möchten. So checken Sie Ihren gewünschten Zielzweig (Master) aus und fügen dann den anderen Zweig ein (entwickeln).

Wenn Sie im ersten Abschnitt "Beschreibung" auf der git-merge man page suchen, sehen Sie ein Diagramm fast identisch mit Ihrem (wenn auch vertikal gekippt), die dies beschreibt.

0

Es ist git checkout master auf 'Master' Zweig zu bekommen, dann git merge develop zu 'Entwicklung' Zweig in aktuellen 'Master' Zweig zu verschmelzen.

6

Das von Ihnen gezeichnete Bild sieht aus wie das Ergebnis von git merge, aber Ihre Beschreibung von dem, was Sie passieren möchten, klingt wie git rebase.

Borrowing vom "Rebasing" chapter der git Community-Buch, wenn Sie auf der mywork Zweig sind und sagen

$ git merge origin

Sie

git merge history

Denken Sie an einer Zusammenführung bekommen als zwei verschiedene Schnappschüsse zusammenstellen: in diesem Fall C4 und C6 zusammen, um C7 zu machen.

Rebase erstellt einen Baum, der genau wie C7 aussieht, aber seine Geschichte sieht komplett anders aus. Sagen Sie statt der merge, Sie

$ git rebase origin

den Befehl gab man

alt text

Wenn Sie sich wünschen finden bekäme: ‚Ich wünschte, ich wirklich die mywork Zweig an C4 statt erstellt hatte von C2, 'git rebase ist der Djinni, der es gewähren wird.

Sie könnten sich auch vorstellen, dass Rebase einen Zweig aus Ihrer Geschichte herausschneidet und ihn an einem anderen Punkt verpflanzt. Verpassen Sie nicht die subtile Veränderung von C5 und C6 zu C5 'und C6'. Obwohl die Bäume gleich aussehen werden, haben sie unterschiedliche Eltern und ändern somit ihre Identitäten.

+0

Nehmen wir an, dass keine zwei Commits die gleiche Datei berühren. Sie würden mit dem gleichen Ergebnis enden, ob Sie verschmolzen oder rebased, richtig? – wxyz

+0

@wxyz Ja, die resultierenden Bäume sind gleich, aber ihre Historien unterscheiden sich wie oben dargestellt. Die Verwendung von 'git rebase' kann helfen, Ihre Historie linear zu halten. –

Verwandte Themen