Rückgängig machen von gepushten Commits in Git mit Reset und Revert

Ankit Raj Goyal 30 Januar 2023
  1. Gepushte Commits rückgängig machen mit dem git reset-Befehl
  2. Gepushte Commits mit dem Befehl git revert rückgängig machen
  3. Gepushte Commits mit dem Befehl git checkout rückgängig machen
Rückgängig machen von gepushten Commits in Git mit Reset und Revert

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"

Machen Sie gesunde Verpflichtungen

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

Alias ​​für Remote-Repo erstellen

An Remote-Repo senden

Unser Remote-Repository hat jetzt zwei Commits.

Das entfernte Repository hat 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"

Machen Sie ein schlechtes Commitment

Wir schieben dieses Commit in das Remote-Repo.

git push undo-remote

Drücken Sie den Bad Commit

Unsere Fernbedienung hat den schlechten Commit:

Die Remote hat das schlechte 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>

Auf letzte gute Zusage zurücksetzen

Wir push das lokale in das entfernte Repository mit der Option -f, um das Pushen zu erzwingen.

git push -f undo-remote

Der fehlerhafte Commit wird aus dem Remote-Repo entfernt

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.

4 fehlerhafte Commits auf die Fernbedienung übertragen

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>

Ein neuer Commit, der den alten schlechten Commit rückgängig macht

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.

Das neue Revert Commit im Remote Repo

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>

Setzen Sie eine Reihe von Commits zurück

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.)

Die Commits im angegebenen Bereich werden mit neuen Commits rückgängig gemacht

Wir pushen jetzt die Änderungen mit dem Flag -f auf die Fernbedienung.

git push -f undo-remote

Das Remote Repo hat die Revert-Commits

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

Machen und pushen Sie einen neuen Branch ohne die schlechten Commits

Das Remote-Repository hat jetzt einen neuen Zweig ohne fehlerhafte Commits.

Das Remote Repo hat einen neuen Zweig ohne die Bad Commits

Verwandter Artikel - Git Undo