Ich habe mich gerade perfekt für den falschen Zweig entschieden. Wie mache ich das letzte Commit in meinem Hauptzweig rückgängig und nehme dann dieselben Änderungen und bringe sie in meinen Upgrade-Zweig?
git
git-commit
Mikewilliamson
quelle
quelle
git reset --soft HEAD\^
4 Jahre zu spät zum Thema, aber dies könnte für jemanden hilfreich sein.
Wenn Sie vergessen haben, vor dem Festschreiben einen neuen Zweig zu erstellen, und alle auf dem Master festgeschrieben haben, ist der folgende Ansatz einfacher, unabhängig davon, wie viele Festschreibungen Sie durchgeführt haben:
Jetzt haben Sie Ihren Hauptzweig gleich
origin/master
und alle neuen Commits sind aktiviertmy_feature
. Beachten Sie, dassmy_feature
es sich um einen lokalen Zweig handelt, nicht um einen Remote-Zweig.quelle
master
, setzen Sie dannmaster
auforigin/master
.origin/master
sich diese bereits auf dem Commit befinden, auf das Sie zurücksetzen möchten! Die Gutschrift für den Tipp ist jedoch diese Seite: github.com/blog/…Wenn Sie eine saubere (unveränderte) Arbeitskopie haben
So setzen Sie ein Commit zurück (stellen Sie sicher, dass Sie den Hash des Commits für den nächsten Schritt notieren):
So ziehen Sie dieses Commit in einen anderen Zweig:
Wenn Sie Änderungen geändert oder nicht verfolgt haben
Beachten Sie auch , dass
git reset --hard
wird keine untracked und modifizierte Änderungen töten Sie haben könnten, wenn Sie also diejenigen , haben Sie vielleicht lieber:quelle
git rev-parse BRANCH_NAME
um die sha zu bekommen.git reflog show <branch>
!git stash
vor dem Zurücksetzen verwenden undgit stash pop
anschließend verwenden, um sie wiederherzustellen, so dass man sich nicht vor dem--hard
Teil fürchten mussWenn Sie Ihre Änderungen bereits gepusht haben, müssen Sie nach dem Zurücksetzen des KOPFES Ihren nächsten Push erzwingen.
Warnung: Durch einen Hard-Reset werden nicht festgeschriebene Änderungen in Ihrer Arbeitskopie rückgängig gemacht, während durch einen Force-Push der Status des Remote-Zweigs vollständig mit dem aktuellen Status des lokalen Zweigs überschrieben wird.
Nur für den Fall, unter Windows (über die Windows-Befehlszeile, nicht über Bash) sind es tatsächlich vier
^^^^
statt einsquelle
git reset --hard COMMIT_HASH
git push --force
Ich habe kürzlich das Gleiche getan, bei dem ich versehentlich einen Wechsel zum Master vorgenommen habe, als ich mich zu einem anderen Zweig hätte verpflichten sollen. Aber ich habe nichts geschoben.
Wenn Sie sich nur für den falschen Zweig entschieden haben und seitdem nichts geändert haben und nicht zum Repo gewechselt sind, können Sie Folgendes tun:
HINWEIS: Im obigen Beispiel habe ich 1 Commit mit git reset HEAD ~ 1 zurückgespult. Wenn Sie jedoch n Commits zurückspulen möchten, können Sie HEIT ~ n zurücksetzen.
Wenn Sie sich am Ende für den falschen Zweig entschieden und mehr Code geschrieben haben, bevor Sie festgestellt haben, dass Sie sich für den falschen Zweig entschieden haben, können Sie git stash verwenden, um Ihre laufende Arbeit zu speichern:
HINWEIS: Ich habe diese Website als Referenz verwendet. Https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/
quelle
git checkout -b new_branch
Recht von dort aus ausgeführt. Ich muss mich nicht erneut festlegen.Wenn es sich bei Ihrem Szenario also um ein Szenario handelt, für das Sie sich verpflichtet haben, das Sie
master
jedoch festlegen möchtenanother-branch
(das möglicherweise noch nicht vorhanden ist), das Sie jedoch noch nicht gepusht haben, ist dies recht einfach zu beheben.Jetzt sind alle Ihre Verpflichtungen
master
erfülltanother-branch
.Mit Liebe bezogen von: http://haacked.com/archive/2015/06/29/git-migrate/
quelle
another-branch
existierte bereits. In diesem Fall hat es nur die Commits zunichte gemacht, die ich gemacht hatte, um sie zu meistern, und sie nicht übernommenanother-branch
.Um näher auf diese Antwort, falls Sie mehrere Commits haben, sich von, zum Beispiel
develop
zunew_branch
:quelle
Wenn Sie auf dieses Problem stoßen und Visual Studio haben, können Sie Folgendes tun:
Klicken Sie mit der rechten Maustaste auf Ihre Filiale und wählen Sie
View History
:Klicken Sie mit der rechten Maustaste auf Commit, zu dem Sie zurückkehren möchten. Und nach Bedarf zurücksetzen oder zurücksetzen.
quelle
Für mehrere Commits im falschen Zweig
Wenn es für Sie nur 1 Commit ist, stehen Ihnen viele andere einfachere Reset-Lösungen zur Verfügung. Für mich wurden ungefähr 10 Commits versehentlich durchgeführt,
master
anstatt, nennen wir esbranch_xyz
, und ich wollte den Commit-Verlauf nicht verlieren.Was Sie tun konnten und was mich rettete, war die Verwendung dieser Antwort als Referenz in einem 4-stufigen Prozess.
master
branch_xyz
master
Hier sind die obigen Schritte im Detail -
Erstellen Sie einen neuen Zweig aus dem
master
(wo ich versehentlich viele Änderungen vorgenommen hatte)Hinweis: Das
-b
Flag wird verwendet, um einen neuen Zweig zu erstellen. Umzu überprüfen, ob wir das richtig verstanden haben, würde ich schnell
git branch
sicherstellen, dass wir uns imtemp_branch_xyz
Zweig befinden, undgit log
prüfen, ob wir die Commits richtig ausgeführt haben.Führen Sie den temporären Zweig in den Zweig ein, der ursprünglich für die Commits vorgesehen war, d
branch_xyz
. H.Wechseln Sie zunächst zum ursprünglichen Zweig, z. B.
branch_xyz
(Möglicherweise müssen Sie dies tun,git fetch
wenn Sie dies nicht getan haben).Hinweis:
-b
Flag nicht verwendenLassen Sie uns jetzt den temporären Zweig mit dem Zweig zusammenführen, den wir gerade auschecken
branch_xyz
Möglicherweise müssen Sie sich hier um einige Konflikte kümmern, wenn es solche gibt. Sie können nach erfolgreicher Zusammenführung drücken (ich würde) oder mit den nächsten Schritten fortfahren.
Lösen Sie die versehentlichen Commits auf
master
mit dieser Antwort als Referenz, ersten Schalter auf demmaster
Machen Sie es dann vollständig rückgängig, um es an die Fernbedienung anzupassen (oder an ein bestimmtes Commit, wenn Sie möchten).
Ich würde wieder ein
git log
Vorher und Nachher machen, um sicherzustellen, dass die beabsichtigten Änderungen wirksam werden.Löschen der Beweise, dh Löschen des temporären Zweigs. Dazu müssen Sie zuerst den Zweig auschecken, in den die Temperatur zusammengeführt wurde, dh
branch_xyz
(Wenn Sie eingeschaltet bleibenmaster
und den folgenden Befehl ausführen, erhalten Sie möglicherweise eineerror: The branch 'temp_branch_xyz' is not fully merged
)und löschen Sie dann den Beweis für dieses Missgeschick
Los geht's.
quelle
Wenn die Verzweigung wollten Sie Ihre Änderungen gelten bereits vorhanden ist (Zweig entwickeln , zum Beispiel), folgen Sie den Anweisungen, die von bereitgestellt wurden fotanus unten, dann gilt :
Und natürlich können Sie Tempbranch oder einen anderen Filialnamen anstelle von my_feature verwenden, wenn Sie möchten .
Falls zutreffend, verzögern Sie den Stash-Pop (Anwenden) auch, bis Sie ihn in Ihrem Zielzweig zusammengeführt haben.
quelle
Für mich wurde dies gelöst, indem das Commit, das ich gepusht hatte, zurückgesetzt und dann das Commit für den anderen Zweig ausgewählt wurde.
Sie können verwenden
git log
, um den richtigen Hash zu finden, und Sie können diese Änderungen jederzeit übertragen!quelle