2013-05-30 17 views
6

ich die git Strömungs Weise bin mit Niederlassungen in meinem Repo der Verwaltung, wie beschrieben in: http://nvie.com/posts/a-successful-git-branching-model/git verschmelzen mit --no-ff und --squash

So ist die Folge von Befehlen soll ich verwenden als wäre folgt:

git checkout mybranch 
git pull --rebase origin develop 
git checkout develop 
git merge --no-ff mybranch 

jedoch eine Sache gibt, die ich anders in einigen Fällen tun möchte:

ich möchte alle meine Commits auf meinem Zweiges (mybranch), erhalten, sondern haben sie wurden zusammen geworfen (oder gequetscht) zu einem einzigen Unterschied beim Zusammenführen in develop.

So ist es das, was ich denke, die Folge von Befehlen sein sollte:

git checkout mybranch 
git pull --rebase origin develop 
git checkout develop 
git merge --no-ff --squash mybranch 

Würde ich Dinge falsch machen, wenn ich --no-ff mit --squash kombinieren waren?

Ich bin zögerlich, dies zu versuchen, ergibt sich aus, wie „Quetschen“ und „Bewahrung der Geschichte“ sind orthogonal Anforderungen - siehe Squashing all of my commits (including merges) into one commit without altering history

Meine Begründung ist, dass ich Geschichte bewahren auf einem Zweig wollen (mybranch) und suqash auf ein weiterer Zweig (develop) -> da diese Aktionen in getrennten Zweigen ausgeführt werden, ist das OK.

+0

Warum nicht Sie es einfach versuchen. Sie können immer ein hartes "Reset" durchführen, wenn es nicht funktioniert. Mach einfach einen temporären Zweig an der alten Stelle. Mach weiter. Versuch es. Du weißt, dass du willst ... –

Antwort

1

versuchte ich --squash und --no-ff zusammen und bekam die Kombination:

fatal: You cannot combine --squash with --no-ff. 

Ein git merge im Grunde ein Squash ist. Nach dem Lösen von Konflikten erscheint es als ein Commit bei der Entwicklung. Das Diff der Zusammenführungsrevision ist das Ergebnis der Konfliktlösung. Und ja, die Änderungen auf meiner Seite bleiben erhalten. Tun Sie einfach "gitk mybranch &" nach der Zusammenführung zu verifizieren.

Neben The Shadow ist richtig. Sei nicht ängstlich. Erstellen Sie einen neuen Zweig, spielen Sie herum und sehen Sie, was die Ergebnisse sind.

Der Schaden wurde in Ihrem Befehl "git pull --rebase origin develop" verursacht.

Antwort (vorausgesetzt, dass Sie lokale Niederlassung entwickeln haben, basierend auf Herkunft/Entwicklung):

git checkout develop 
git pull 
git merge --no-ff mybranch 
+0

Wer in der Welt ist "The Shadow"? Meinst Du "Cupcake"? – masotime

+0

Meine Vermutung ist, dass jemand seit meinem Post seinen Namen geändert oder eine Antwort gelöscht hat. – cforbish