Wie kann ich einen falschen Git-Zweig reparieren?

Ich habe gerade eine großartige Lösung für den falschen Zweig gefunden. Wie kann ich das letzte Commit in meinem Hauptzweig abbrechen und dann dieselben Änderungen vornehmen und sie in meinem Aktualisierungszweig abrufen?

414
31 мая '10 в 8:30 2010-05-31 08:30 Eingestellt von Mikewilliamson am 31. Mai '10 um 08:30 Uhr 2010-05-31 08:30
@ 8 Antworten

Wenn Sie Ihre Änderungen noch nicht angeklickt haben, können Sie auch einen Soft-Reset durchführen:

 git reset --soft HEAD^ 

Dadurch wird ein Commit zurückgegeben, die korrigierten Änderungen werden jedoch an Ihren Index zurückgegeben. Unter der Annahme, dass die Zweige relativ zueinander relativ modern sind, können Sie mit git in einem anderen Zweig prüfen, woraufhin Sie einfach Folgendes beheben können:

 git checkout branch git commit 

Der Nachteil ist, dass Sie die Festschreibenachricht erneut eingeben müssen.

618
31 мая '10 в 8:53 2010-05-31 08:53 antwortete Blair Holloway am 31. Mai 10 um 08:53 2010-05-31 08:53

Wenn Sie eine saubere (unveränderte) Arbeitskopie haben

Einen Commit zurücksetzen (überprüfen Sie den Commit-Hash für den nächsten Schritt):

 git reset --hard HEAD^ 

Um diese Fixierung auf einen anderen Zweig zu übertragen:

border=0
 git checkout other-branch git cherry-pick COMMIT-HASH 

Wenn Sie Änderungen vorgenommen oder nicht verfolgt haben

Beachten Sie auch, dass git reset --hard alle unspielbaren und geänderten Änderungen , die Sie möglicherweise vorgenommen haben, beendet. Wenn Sie also solche haben, die Sie vielleicht bevorzugen:

 git reset HEAD^ git checkout . 
79
31 мая '10 в 8:33 2010-05-31 08:33 antwortete Michael Mrozek am 31. Mai 10 um 08:33 2010-05-31 08:33

4 Jahre zu spät zum Thema, aber es kann für jemanden nützlich sein.

Wenn Sie vergessen haben, einen neuen Zweig zu erstellen, bevor Sie einen Commit ausführen und alles auf den Master übertragen, egal wie viel Sie getan haben, ist der folgende Ansatz einfacher:

 git stash # skip if all changes are committed git branch my_feature git reset --hard origin/master git checkout my_feature git stash pop # skip if all changes were committed 

Nun ist Ihr Hauptzweig origin/master und alle neuen Commits sind auf my_feature . Beachten Sie, dass my_feature ein lokaler Zweig und kein entfernter ist.

61
06 февр. Die Antwort wird fotanus 06 Feb. gegeben. 2014-02-06 17:44 '14 um 17:44 2014-02-06 17:44

Wenn Sie Ihre Änderungen bereits vorgenommen haben, müssen Sie nach dem Zurücksetzen des HEAD die nächste erzwingen.

 git reset --hard HEAD^ git merge COMMIT_SHA1 git push --force 

Warnung: Bei einem harten Reset werden alle anstehenden Änderungen in Ihrer Arbeitskopie abgebrochen. Durch Drücken wird der Status des Remote-Zweigs vollständig mit dem aktuellen Status des lokalen Zweigs überschrieben.

Nur für den Fall (unter Windows (mit der Windows-Befehlszeile, nicht mit Bash)) gibt es tatsächlich vier ^^^^ anstelle von einem

 git reset --hard HEAD^^^^ 
17
31 мая '10 в 9:11 2010-05-31 09:11 Die Antwort wird von Igor Zevaka am 31. Mai '10 um 9:11 2010-05-31 09:11 gegeben

Das tat ich kürzlich, als ich aus Versehen zum Meister wechselte, als ich mich einem anderen Zweig widmen musste. Aber ich habe nichts gestoßen.

Wenn Sie gerade den falschen Zweig erstellt und seitdem nichts geändert haben und nicht auf das Repo geklickt haben, können Sie Folgendes tun:

 // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." 

HINWEIS. Im obigen Beispiel habe ich 1 Fixation mit git reset HEAD ~ 1 zurückgespult. Wenn Sie jedoch n Commits zurückspulen möchten, können Sie git reset HEAD ~ n ausführen.

Wenn Sie die Arbeit mit dem falschen Zweig abgeschlossen haben und auch einen anderen Code geschrieben haben, bevor Sie feststellen, dass Sie den falschen Zweig ausgeführt haben, können Sie git stash verwenden, um Ihre unfertige Arbeit zu speichern:

 // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop 

HINWEIS. Ich habe diese Site als Link verwendet https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

4
31 мая '17 в 0:51 2017-05-31 00:51 Die Antwort wird von Ali Mizan am 31. Mai 17 um 0:51 2017-05-31 00:51 gegeben

Wenn Ihr Skript also lautet, dass Sie master , aber an einen another-branch (der möglicherweise nicht bereits vorhanden ist), Sie aber noch nicht geklickt haben, ist dies ziemlich einfach zu beheben.

 // if your branch doesn't exist, then add the -b argument git checkout -b another-branch git branch --force master origin/master 

Jetzt werden alle Ihre Verpflichtungen, die Sie master müssen, in another-branch .

Quellen: http://haacked.com/archive/2015/06/29/git-migrate/

2
08 апр. Antwort Lorcan O'Neill 08 Apr 2016-04-08 16:19 '16 am 16:19 2016-04-08 16:19

Wenn dieses Problem auftritt und Sie Visual Studio haben, können Sie Folgendes tun:

Klicken Sie mit der rechten Maustaste auf Ihren Zweig und wählen Sie Verlauf View History :

2019

05 апр. die antwort ist gegeben Trevor 05 apr. 2017-04-05 02:39 '17 am 2:39 2017-04-05 02:39

Wenn der Zweig, auf den Sie Ihre Änderungen anwenden möchten , bereits vorhanden ist (z. B. zum Entwickeln von Zweigen), befolgen Sie die Anweisungen von fotanus unten.

 git checkout develop git rebase develop my_feature # applies changes to correct branch git checkout develop # 'cuz rebasing will leave you on my_feature git merge develop my_feature # will be a fast-forward git branch -d my_feature 

Natürlich können Sie anstelle von my_feature auch Tempbranch oder einen anderen Zweignamen verwenden, wenn Sie möchten.

Darüber hinaus verzögern Sie ggf. die Popup-Meldung (Apply), bis Sie in Ihrem Zielzweig vereint sind.

0
24 авг. die antwort wird von fbicknel 24 aug gegeben. 2016-08-24 01:15 '16 um 01:15 Uhr 2016-08-24 01:15 Uhr

Weitere Fragen zu Tags oder Frage stellen