Rückgängig machen von gepushten Commits in Git mit Reset und Revert
-
Gepushte Commits rückgängig machen mit dem
git reset
-Befehl -
Gepushte Commits mit dem Befehl
git revert
rückgängig machen -
Gepushte Commits mit dem Befehl
git checkout
rückgängig machen
Wir zeigen drei Methoden, um Push-Commits von einem Remote-Repository in Git rückgängig zu machen. Wir verwenden dafür die git-Befehle reset
, revert
und checkout
.
Wenn wir git reset
verwenden, entfernen wir auch jede Spur der unerwünschten Commits aus dem Repository-Verlauf. Aber mit git revert
bleiben sowohl die ursprünglichen als auch die Undo-Commits in der Historie.
Wenn wir git checkout
verwenden, machen wir die Änderungen in einem neuen Zweig rückgängig.
Gepushte Commits rückgängig machen mit dem git reset
-Befehl
Wir erstellen ein undo_pushed_commits_local
-Repository und füllen es mit ein paar gesunden (guten) Commits.
mkdir undo_pushed_commits_local
git init
Dann Dateien hinzufügen/ändern.
git add --all
git commit -m "Make healthy commit"
Weitere Dateien hinzufügen/ändern.
git add -all
git commit -m "Make another healthy commit"
Wir werden diese Commits nun in das Repository undo-pushed-commits-remote
auf GitHub pushen.
git remote add undo-remote git@github.com:danielturidandy/undo-pushed-commits-remote.git
git push undo-remote master
Unser Remote-Repository hat jetzt zwei Commits.
Lassen Sie uns jetzt das schlechte Commit machen.
echo "This is a bad addition" >> file1.txt
echo "This is a bad addition" >> file2.txt
git add -all
git commit -m "Make a bad commit"
Wir schieben dieses Commit in das Remote-Repo.
git push undo-remote
Unsere Fernbedienung hat den schlechten Commit:
Wir reset
nun auf den letzten guten Commit in unserem lokalen Repo. Wir verwenden die Option --hard
, um alle Spuren der schlechten Commits aus dem Commit-Verlauf zu entfernen.
git log
git reset --hard <SHA of the last good commit>
Wir push
das lokale in das entfernte Repository mit der Option -f, um das Pushen zu erzwingen.
git push -f undo-remote
Diese Methode funktioniert am besten mit privaten Repositories oder Repositories mit kleinen Teams.
Große Teams könnten auf Probleme stoßen, wenn einige Entwickler die Fernbedienung in ihre lokale Umgebung ziehen, nachdem sie die fehlerhaften Commits gepusht haben, bevor wir sie auf einen guten Zustand zurücksetzen. Sie haben keinen Commits-Verlauf mit Informationen über fehlerhafte Commits, um ihre Repositories zu korrigieren.
Gepushte Commits mit dem Befehl git revert
rückgängig machen
Wir haben hier vier fehlerhafte Commits in das Remote-Repo verschoben.
Wir können revert
verwenden, um entweder einen einzelnen schlechten Commit oder eine Reihe von schlechten Commits rückgängig zu machen.
revert
macht einen neuen Commit, der den unerwünschten Commit rückgängig macht. Sowohl die ursprünglichen als auch die umgekehrten Commits bleiben im Repository-Verlauf.
Ein einzelnes Push-Commit mit revert
rückgängig machen
git revert <SHA of the commit we want to revert>
Wir schieben diese Änderung jetzt in das Remote-Repo. Denken Sie daran, das Flag -f zu verwenden, um sicherzustellen, dass keine Konflikte entstehen.
git push -f undo-remote
Unser entferntes Repository hat jetzt das neue Commit, das das fehlerhafte Commit rückgängig macht.
Eine Reihe von Push-Commits mit revert
rückgängig machen
git revert <SHA of the oldest commit to revert>..<SHA of the newest commit to revert>
Dadurch werden alle Commits im angegebenen Bereich zurückgesetzt (ohne den ältesten Commit, aber dies kann auch von der Version/Plattform abhängen, die Sie verwenden.)
Wir pushen jetzt die Änderungen mit dem Flag -f auf die Fernbedienung.
git push -f undo-remote
Diese Methode eignet sich hervorragend für öffentliche Repositories mit großen Teams, die daran arbeiten. Da sowohl die fehlerhaften als auch die rückgängig gemachten Commits im Verlauf bleiben, können Entwickler ihre lokalen Repositories mit allen fehlerhaften Pushs/Reverts auf dem neuesten Stand halten.
Gepushte Commits mit dem Befehl git checkout
rückgängig machen
Diese Technik ist ein schneller Hack, der einen neuen Zweig ohne die schlechten Commits forkt. Es ist großartig für kleine Codebasen und wenn Sie wenig Zeit haben.
Wir checken
zuerst bis zum letzten guten Commit.
git checkout <SHA of last known good commit>
Wir erreichen dann einen getrennten HEAD-Zustand beim letzten bekannten guten Commit im Repository-Verlauf.
Wir geben hier jetzt einen neuen Zweig von diesem Zustand ab.
git checkout -b branch_without_badcommits
Wir schieben es dann in die Fernbedienung in einen neuen Zweig.
git push -f undo-remote branch_without_badcommits
Das Remote-Repository hat jetzt einen neuen Zweig ohne fehlerhafte Commits.