Ich selbst und ein anderer Entwickler hatten unsere Arbeit zusammengeführt und in einen Nicht-Master-Zweig namens Toolwork verlagert. Auf diese Weise haben wir den Rest des Teams nicht beeinflusst. Mein Themenzweig hieß DPM-93 und mein Git-Workflow war dieser.
# do some work
git checkout DPM-93
git commit -m "did some work"
# catch up
git checkout toolwork
git pull origin toolwork
# rebase my topic branch
git checkout DPM-93
git rebase toolwork
# merge and push my changes
git checkout toolwork
git merge --no-ff DPM-93
git push origin toolwork
Das hat meistens gut funktioniert, bis ich versehentlich diese Git-Befehle ausgegeben habe
git checkout toolwork
git pull origin master
Zu diesem Zeitpunkt tauchten eine Reihe neuer Dinge in der Zweigwerkzeugarbeit auf, und ich bin mir nicht sicher, wie ich sie beseitigen kann, ohne meinen Arbeitsbereich zu löschen und erneut aus dem Repo zu klonen.
Gibt es eine Möglichkeit, dies vor dem Ziehen an den Staat zurückzugeben?
git rebase -i ORIG_HEAD
die unerwünschten Commits zu löschen, vorausgesetzt, noch hat niemand vom Master gezogen?git reset
in diesem Fall ähnlich wie bei a.git reset --hard
nicht nur den Arbeitsbaum und den Index ändert, sondern auch den übergeordneten Zeiger in der DAG entfernt.Setzen Sie den Hauptzweig zurück:
quelle
Mit können
git log
Sie den SHA-1 der Revision finden, die Sie am Anfang Ihrertoolwork
Zweigstelle haben möchten , und danngit reset --hard <SHA1>
Ihre Arbeitskopie auf diese Revision zurücksetzen.Sichern Sie zuerst alles! Lesen Sie die Manpage erneut
git reset
, um sicherzustellen, dass sie das tut, was Sie wollen.EDIT: Oh ja, ORIG_HEAD sollte das richtige SHA-1 enthalten. Aber überprüfen Sie zuerst.
quelle
git reset
ist richtig (obwohl ein bisschen gefährlich, wie Sie zu Recht erwähnen). +1Ich habe kürzlich etwas Ähnliches getan und eine einfachere Lösung verwendet, die auf dieser Antwort basiert .
Unter der Annahme , dass der Zustand der
toolwork
Zweig, den Sie wiederherstellen möchten gedrückt wurde , umorigin
, können Sie einfach tunIn meinem Fall wurde der Wert von
ORIG_HEAD
durch eine andere Zusammenführung in einem anderen Zweig überschrieben, und dabei musste ich mich nicht um die Suche nach dem richtigen Commit im Protokoll kümmern.quelle
Was für mich funktioniert hat ist einfach
Ich habe dies aus dem lokalen Repository mit dem unglücklichen Zusammenführen / Ziehen getan:
quelle
Sie können diese Zusammenführung mit dem folgenden Befehl abbrechen
Es wird einfach das versehentliche Ziehen rückgängig machen ...
quelle