Frage

Ich habe gerade ein ganz gute an den falschen Zweig zu begehen. Wie kann rückgängig gemacht werden ich die letzte in meinem Master-Zweig begehen und dann die gleichen Änderungen nehmen und sie in mein Upgrade Zweig bekommen?

War es hilfreich?

Lösung

Wenn Sie noch nicht Ihre Änderungen gedrückt, können Sie auch ein Soft-Reset tun:

git reset --soft HEAD^

Dies kehrt die begehen, sondern setzen welche die Änderungen wieder in den Index. Unter der Annahme, die Zweige sind relativ up-to-date in Bezug zueinander, git lassen Sie eine Kasse in den anderen Zweig tun, worauf Sie können einfach begehen:

git checkout branch
git commit

Der Nachteil ist, dass Sie benötigen, um Ihre Nachricht verpflichten erneut eingeben.

Andere Tipps

4 Jahre zu spät auf dem Thema, aber dies könnte jemand hilfreich sein.

Wenn Sie einen neuen Zweig zu erstellen vergessen haben, bevor sie sich und verpflichtet, alle auf Meister, egal wie viele Commits du getan hast, wird die folgende Vorgehensweise ist 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

Jetzt haben Sie Ihren Master-Zweig gleich zu origin/master und alle neuen Commits sind auf my_feature. Beachten Sie, dass my_feature eine lokale Niederlassung, kein Fern ein.

Wenn Sie eine saubere (unmodifizierten) Arbeitskopie

Um ein Rollback commit (stellen Sie sicher, beachten Sie die den Hash für den nächsten Schritt zu begehen):

git reset --hard HEAD^

zu ziehen, die in einen anderen Zweig begehen:

git checkout other-branch
git cherry-pick COMMIT-HASH

Wenn Sie geändert haben oder untracked Änderungen

Beachten Sie auch, dass git reset --hard wird tötet keine untracked und modifizierte Änderungen Sie haben könnten, wenn Sie also diejenigen, haben Sie vielleicht lieber:

git reset HEAD^
git checkout .

Wenn Sie bereits Ihre Änderungen gedrückt, müssen Sie Ihren nächsten Stoß erzwingen, nachdem der Kopf zurückzusetzen.

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

. Achtung: ein Hard-Reset werden alle nicht gebundenen Änderungen in Ihrer Arbeitskopie rückgängig zu machen, während eine Kraft Push vollständig den Zustand des entfernten Zweig mit dem aktuellen Zustand der lokalen Niederlassung überschreiben

Nur für den Fall, unter Windows (mit der Windows-Kommandozeile, nicht Bash) ist es eigentlich vier ^^^^ statt einem, so ist es

git reset --hard HEAD^^^^

Ich habe vor kurzem die gleiche Sache, wo ich aus Versehen eine Änderung Master begangen, als ich auf anderen Zweig begangen haben sollte. Aber ich habe nichts schieben.

Wenn Sie nur an den falschen Zweig verpflichtet und haben sich nicht verändert alles da, und haben an den Repo nicht gedrückt, dann 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's 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: in dem obigen Beispiel, ich war Zurückspulen 1 commit mit git reset HEAD ~ 1. Aber wenn man zurückspulen n Commits wollte, dann können Sie git reset HEAD tun ~ n.

Auch, wenn Sie an den falschen Zweig am Ende zu begehen, und auch schreibt einig mehr Code am Ende vor der Realisierung, dass Sie an den falschen Zweig begangen, dann könnte man git stash verwenden, um Ihre in-progress Arbeit zu sparen:

// 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: habe ich diese Website als Referenz https: //www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

Also, wenn Ihr Szenario ist, dass Sie master begangen haben, aber zu another-branch begehen soll (was kann oder nicht nicht vorhanden ist), aber sie haben noch nicht gedrückt, das ist 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 sind alle Ihre Commits master auf another-branch sein wird.

Sourced mit der Liebe aus: http://haacked.com/archive/ 2015/06/29 / git-migrate /

Um näher auf dieser Antwort, falls Sie mehrere Commits haben zu bewegen, von z.B. develop zu new_branch:

git checkout develop # You're probably there already
git reflog # Find LAST_GOOD, FIRST_NEW, LAST_NEW hashes
git checkout new_branch
git cherry-pick FIRST_NEW^..LAST_NEW # ^.. includes FIRST_NEW
git reflog # Confirm that your commits are safely home in their new branch!
git checkout develop
git reset --hard LAST_GOOD # develop is now back where it started

Wenn Sie in dieser Ausgabe laufen und Sie haben Visual Studio, können Sie Folgendes tun:

Rechtsklick auf Ihren Zweig und wählen View History:

Rechtsklick auf verpflichten Sie wollen zurück zu gehen. Und Revert oder Reset nach Bedarf.

Wenn die Verzweigung Sie wollten Ihre Änderungen gelten bereits vorhanden ist (Zweig entwickeln , zum Beispiel), folgen Sie den Anweisungen, die von fotanus unten, dann:

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

Und natürlich könnten Sie tempbranch oder andere Zweignamen anstelle von my_feature , wenn man wollte.

Auch wenn anwendbar, den Stash Pop verzögern (Aufpreis), bis Sie an Ihrem Zielbranche verschmolzen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top