2010-01-08 8 views
17

Ich bin neu in Git und ein bisschen verwirrt. Ich habe einen Master-Zweig und habe einen zweiten Feature-Zweig erstellt.GIT: Muss ich meinen Zweig festlegen, bevor ich einen anderen Zweig abgucke, was ist mit dem Verstecken?

Wenn ich Änderungen in meinem Feature-Zweig mache und dann zum Master übergehe, gehen meine Änderungen verloren, wenn ich mich nicht verpflichte?

Wo kommt Stash ins Spiel, ist es etwas, das Sie tun, bevor Sie die Verzweigungen wechseln (aber nicht festschreiben wollen) oder einfach einige Änderungen rückgängig machen, damit Sie vorübergehend zum vorherigen Code zurückkehren können?

Antwort

12

Sie können nicht in einen anderen Zweig wechseln, wenn Sie Ihren Baum nicht bereinigen. Dies geschieht, indem Sie Ihre Änderungen festschreiben, sie rückgängig machen oder sie im Stash speichern.

+4

'git checkout' wird sowohl gestufte als auch nicht gestartete Änderungen beim Wechseln von Verzweigungen übernehmen, solange die Änderungen auf Dateien beschränkt sind, die ansonsten in der aktuellen Verzweigung und der neuen Verzweigung identisch sind (dh es besteht keine Chance auf Konflikte Änderungen sollten auf jeden Zweig angewendet werden). Darüber hinaus kann man einen Zusammenführungsversuch mit "git checkout --merge" erzwingen, aber dies kann zu Konflikten führen, und diese Konflikte können schwierig zu lösen sein (was es schwierig machen kann, in den Pre-Checkout-Zustand zurückzukehren). –

+0

Wow, ich weiß nicht, wer es war, aber danke für die -2 downvote ... Ich habe das vor einer Weile auch herausgefunden, aber zum Zeitpunkt des Schreibens erinnere ich mich, dass es nicht möglich war. Ist es neu für Git 1.7? – Htbaa

2

Sie wollen wahrscheinlich nicht für diesen Zweck stash verwenden.

Wenn Sie wirklich auf dem Master und einem Feature-Zweig zur gleichen Zeit entwickeln möchten, empfehle ich, Ihr Repository zu klonen, im Klon und im Master zu arbeiten und dann mit Push und Pull die Änderungen zwischen ihnen zu verschieben.

Wenn Sie häufig zwischen ihnen wechseln, empfehle ich einchecken, bevor Sie wechseln; es ist nichts Falsches daran, Müll einzusehen; git macht es später leicht, das zu klären.

+0

hier ist meine Situation. Ich habe eine Lösung mit ein paar Webseiten. Ich möchte gleichzeitig an verschiedenen Versionen des Projekts arbeiten, ich möchte nicht für jedes einzelne Arbeitsverzeichnis verschiedene verwenden müssen. Ich suche also nach einer Möglichkeit, zwischen verschiedenen Versionen des Projekts zu wechseln, aber ich habe es geschafft, alle Dateien für mich zu ändern, so dass ich eine IIS-Konfiguration verwenden kann, die auf jede Website verweist und nicht alle meine Einstellungen ändern muss spezifische Pfade, etc. – BoomTownTech

+1

Beachten Sie, dass 'stash' funktioniert, indem Sie genau so einchecken, wie Sie es vorschlagen. Es ist ein gültiges Commit im Repository wie jedes andere auch. Es kommt vor, dass * nicht * von einem Zweigverweis referenziert wird, aber es wird von der 'Versteckreferenz' gepinnt. Siehe den Abschnitt * DISKUSSION * hier: http://www.kernel.org/pub/software/scm/git/docs/git-stash.html – seh

+3

ah, aber es ist leicht, den Überblick über die Tatsache zu verlieren, die du versteckt hast, wenn du auf andere Dinge aufmerksam geworden bist. Meiner Meinung nach ist es sicherer, sich an die Spitze Ihrer Branche zu binden. –