web-dev-qa-db-de.com

Fehler beim Wechsel zum Hauptzweig: Meine lokalen Änderungen würden von der Kasse überschrieben

Diese Frage ist ähnlich wie diese , aber genauer.

Ich habe ein Projekt mit zwei Zweigen (staging und beta). 

Ich entwickle auf staging und verwende den Zweig master, um Fehler zu beheben. Wenn ich also am Staging arbeite und einen Fehler sehe, wechsle ich zu master branch:

git checkout master

und mach das Zeug:

git add fileToAdd
git commit -m "bug fixed"

und dann verschmelze ich mit beiden Zweigen:

git checkout staging
git merge master
git checkout beta
git merge beta

Es spielt keine Rolle, ob sich andere Dateien im Arbeitsbaum befinden.

Nun aber wenn ich versuche, zum Zweig master zu wechseln, erhalte ich einen Fehler:

error: Your local changes to the following files would be overwritten by checkout:
src/Pro/ConvocationBundle/Controller/DefaultController.php
Please, commit your changes or stash them before you can switch branches.
Aborting

Ich dachte, ich sollte die Datei aus dem Bereitstellungsbereich entfernen:

git reset HEAD src/Pro/ConvocationBundle/Controller/DefaultController.php

aber ich bekomme den gleichen fehler. Wenn ich git status tue, bekomme ich No changes to commit

84
Manolo

Ihr Fehler wird angezeigt, wenn Sie eine Datei geändert haben und der Zweig, zu dem Sie wechseln, auch für diese Datei Änderungen vorgenommen hat (vom neuesten Zusammenführungspunkt).

Ihre Optionen sind, wie ich es sehe, - commit, und ändern Sie dann dieses Commit mit zusätzlichen Änderungen (Sie können Commits in git ändern, sofern sie nicht Pushed sind); oder - stash verwenden:

git stash save your-file-name
git checkout master
# do whatever you had to do with master
git checkout staging
git stash pop

git stash save erstellt ein Versteck, das Ihre Änderungen enthält, aber es ist keinem Commit oder Zweig zugeordnet. git stash pop wendet den letzten Stash-Eintrag auf Ihren aktuellen Zweig an, stellt die gespeicherten Änderungen wieder her und entfernt sie aus dem Stash.

83
keltar

Ich bin auf das gleiche Problem gestoßen und habe es gelöst

git checkout -f branch

und seine Spezifikation ist ziemlich klar.

-f, --force

Gehen Sie beim Wechseln der Zweige auch dann vor, wenn der Index oder das Arbeitsfeld Baum unterscheidet sich von HEAD. Dies wird verwendet, um wegzuwerfen lokale Änderungen.

Beim Auschecken von Pfaden aus dem Index nicht fehlschlagen, wenn nicht Einträge Stattdessen werden nicht zusammengeführte Einträge ignoriert.

89
kiki_yu

Sie können die Zweigstelle überprüfen lassen, wenn Sie Ihre lokalen Änderungen nicht festlegen möchten.

git checkout -f branch_name
12
Deepika Patel

Ich bin auf das gleiche Problem gestoßen und habe es gelöst

git-Checkout -f Zweig

Seien Sie vorsichtig mit dem -f-Schalter. Wenn Sie den -f-Schalter verwenden, gehen alle nicht festgeschriebenen Änderungen verloren. In einigen Anwendungsfällen kann es hilfreich sein, -f zu verwenden. In den meisten Fällen möchten Sie stash Ihre Änderungen und dann switch verzweigen. Die stashing-Prozedur wird oben erläutert.

4
BeNiza

Sie können in der aktuellen Zweigstelle einen Commit ausführen, einen anderen Zweig auschecken und schließlich diesen Commit auswählen (anstelle der Zusammenführung).

0