Ein Commit löschen, wenn dieser bereits gepusht wurde

Es kommt schon mal vor, dass man ein Commit pusht, das nicht nötig ist oder einfach verkehrt ist. In diesem kleinen Workaround entfernen wir ein remote und localen Commit.

In diesem Beispiel befinde ich mich im Branch "update_5.5.6". Es kann natürlich auch der "master" Branch sein.

$ git status
On branch update_5.5.6
Your branch is up to date with 'origin/update_5.5.6'.

nothing to commit, working tree clean

In der Übersicht der Commits sehen wir wo wir uns befinden und wohin wir zurückspringen wollen.

$ git log
commit 086140a74bdbdf8baccc2e12e941d6cb5c4e4506 (HEAD -> update_5.5.6, origin/update_5.5.6)
Author: gb-media
Date:   Thu Feb 14 17:53:03 2019 +0100

    after update 5.5.6

commit fd54f83c9de686ac45a75d7aa2265bda609fba03
Author: gb-media
Date:   Thu Feb 14 17:45:22 2019 +0100

    modify update.sh

Ich möchte zum Commit "modify update.sh" zurück, daher benötigen wir den dazugehörigen commit ID:

fd54f83c9de686ac45a75d7aa2265bda609fba03
$ git push -f origin fd54f83c9de686ac45a75d7aa2265bda609fba03:update_5.5.6
Total 0 (delta 0), reused 0 (delta 0)
To http://mygithub.local/git/shopware.git
 + 086140a74...fd54f83c9 fd54f83c9de686ac45a75d7aa2265bda609fba03 -> update_5.5.6 (forced update)

Der Status zeigt das wir nun um ein Commit zurück sind.

$ git status
On branch update_5.5.6
Your branch is ahead of 'origin/update_5.5.6' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Da wir den local Commit auch nicht mehr benötigen, führen wir ein Hard-Reset aus um diesen los zu werden.

$ git reset --hard fd54f83c9de686ac45a75d7aa2265bda609fba03
HEAD is now at fd54f83c9 modify update.sh

Wir sind nun remote und local zum gewünschten Commit zurückgekehrt und der letzte Commit ist entfernt worden.

$ git log
commit fd54f83c9de686ac45a75d7aa2265bda609fba03 (HEAD -> update_5.5.6, origin/update_5.5.6)
Author: gb-media
Date:   Thu Feb 14 17:45:22 2019 +0100

    modify update.sh