Ich habe versehentlich an einem Zweig gearbeitet, an dem ich eine Weile nicht hätte sein sollen, also habe ich mich davon getrennt und ihm den passenden Namen gegeben. Jetzt möchte ich den Zweig überschreiben, auf dem ich nicht die Version von Origin (Github) hätte verwenden sollen. Gibt es eine einfache Möglichkeit, dies zu tun? Ich habe versucht, den Zweig zu löschen und dann den Tracking-Zweig zurückzusetzen, aber es gibt mir nur die Version, an der ich wieder gearbeitet habe.
440
git switch -C mybranch origin/mybranch
. Siehe meine bearbeitete Antwort untenAntworten:
Wenn Sie noch nicht zum Ursprung verschoben haben, können Sie Ihren Zweig auf den vorgelagerten Zweig zurücksetzen mit:
(Stellen Sie sicher, dass Sie Ihr letztes Commit in einem separaten Zweig referenzieren, wie Sie in Ihrer Frage erwähnt haben.)
Beachten Sie, dass sich unmittelbar nach dem Zurücksetzen
mybranch@{1}
auf das alte Festschreiben vor dem Zurücksetzen bezieht.Wenn Sie jedoch bereits einen Push durchgeführt haben, finden Sie unter " Git-Zweig erstellen und Original in den Upstream-Status zurücksetzen " weitere Optionen.
Mit Git 2.23 (August 2019) wäre das ein Befehl :
git switch
.Nämlich:
git switch -C mybranch origin/mybranch
Beispiel
Dadurch werden der Index und der Arbeitsbaum wie gewohnt wiederhergestellt
git reset --hard
.Wie von Brad Herman kommentiert ,
reset --hard
würde a jede neue Datei entfernen oder geänderte Dateien auf HEAD zurücksetzen .git clean -f -d
Um sicherzugehen , dass Sie von einem "sauberen Schiefer" ausgehen, würde a nach dem Zurücksetzen einen Arbeitsbaum sicherstellen, der genau mit dem Zweig identisch ist, auf den Sie gerade zurückgesetzt haben.Dieser Blog-Beitrag schlägt diese Aliase vor (nur für
master
Zweige, aber Sie können diese anpassen / erweitern):quelle
git reset --hard origin/mybranch
Befehl mehrmals verwendet, als mir lokale Änderungen egal waren und ich wollte nur eine saubere Kopie, die dem Ursprung entspricht. Heute hat dies jedoch nicht funktioniert - ich hatte immer noch eine Handvoll neuer, nicht bereitgestellter Dateien, und Git versprach mir immer wieder, dass es bei HEAD war. Der Hinweis zugit clean -f -d
behoben, dass durch Löschen aller neuen Dateien, die ich nicht wollte.git reset --hard HEAD
, um zu einem vorherigen Commit zurückzukehren und alle Änderungen zu ignorierenAngenommen, dies ist passiert:
Dann stellen Sie fest, dass Sie Änderungen am falschen Zweig vornehmen.
Zeigt aber
master
immer noch auf Ihr Commit. Sie möchten, dass es zeigt, wohin es zuvor gezeigt hat.Lösung
Der einfachste Weg ist:
Ein anderer Weg ist:
Beachten Sie, dass bei Verwendung
reset --hard
Ihre nicht festgeschriebenen Änderungen verloren gehen (tests.py
in meinem Beispiel).quelle
Ich habe ein privates Repo auf einem Server und muss es regelmäßig neu starten / erzwingen, was es erforderlich macht, den lokalen Zweig auf meinem anderen Computer häufig zurückzusetzen. Ich habe daher den folgenden Alias "catchup" erstellt, der dies für den aktuellen Zweig ermöglicht. Im Gegensatz zur anderen Antwort enthält dieser Alias keinen fest codierten Zweignamen.
Festhalten.
Richtig formatiert (funktioniert nicht mit den Zeilenumbrüchen in .gitconfig) sieht es folgendermaßen aus:
\\033[0;33m
und\\033[0m
dient zur Hervorhebung des aktuellen Zweigs und stromaufwärts mit Farbe.$(git symbolic-ref -q --short HEAD)
ist der aktuelle Filialname$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))
ist der Upstream des aktuellen Zweigs.Da das Zurücksetzen ein potenziell gefährlicher Aufruf ist (insbesondere mit der Option --hard verlieren Sie alle nicht festgeschriebenen Änderungen), erfahren Sie zunächst, was zu tun ist. Wenn Sie sich beispielsweise in einem Zweig dev-container mit der Fernbedienung qcpp / dev-container befinden und eingeben
git catchup
, werden Sie aufgefordert:Wenn Sie dann y eingeben oder einfach die Eingabetaste drücken, wird der Reset durchgeführt. Wenn Sie etwas anderes eingeben, wird der Reset nicht durchgeführt.
Wenn Sie sehr sicher sein und programmgesteuert verhindern möchten, dass nicht bereitgestellte / nicht festgeschriebene Änderungen verloren gehen, können Sie den obigen Alias mit entsprechenden Überprüfungen auf Diff-Index weiter aufpeppen .
Das obligatorische Wort der Warnung: Wenn Sie an einem öffentlichen Repository arbeiten, auf dem andere Personen basieren, und Sie diesen Alias benötigen, machen Sie es falsch ™ .
quelle
Ich habe es versucht und es hat meinen aktuellen Zweig nicht auf meinen Remote-Github zurückgesetzt. Ich habe gegoogelt und https://itsyndicate.org/blog/how-to-use-git-force-pull-properly/ gefunden.
was vorgeschlagen
Ich wollte meinen v8-Zweig zurücksetzen, also tat ich es
und es hat funktioniert
quelle