Apa yang saya lakukan dalam kasus ini adalah:
Di server, pindahkan kursor kembali ke komit baik terakhir yang diketahui:
git push -f origin <last_known_good_commit>:<branch_name>
Secara lokal, lakukan hal yang sama:
git reset --hard <last_known_good_commit>
# ^^^^^^
# optional
Lihat contoh lengkap tentang cabang my_new_branch
yang saya buat untuk tujuan ini:
$ git branch
my_new_branch
Ini adalah sejarah terbaru setelah menambahkan beberapa hal ke myfile.py
:
$ git log
commit 80143bcaaca77963a47c211a9cbe664d5448d546
Author: me
Date: Wed Mar 23 12:48:03 2016 +0100
Adding new stuff in myfile.py
commit b4zad078237fa48746a4feb6517fa409f6bf238e
Author: me
Date: Tue Mar 18 12:46:59 2016 +0100
Initial commit
Saya ingin menyingkirkan komit terakhir, yang sudah didorong, jadi saya jalankan:
$ git push -f origin b4zad078237fa48746a4feb6517fa409f6bf238e:my_new_branch
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:me/myrepo.git
+ 80143bc...b4zad07 b4zad078237fa48746a4feb6517fa409f6bf238e -> my_new_branch (forced update)
Bagus! Sekarang saya melihat file yang diubah pada komit itu ( myfile.py
) menunjukkan "tidak dipentaskan untuk komit":
$ git status
On branch my_new_branch
Your branch is up-to-date with 'origin/my_new_branch'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: myfile.py
no changes added to commit (use "git add" and/or "git commit -a")
Karena saya tidak ingin perubahan ini, saya hanya memindahkan kursor kembali secara lokal juga:
$ git reset --hard b4zad078237fa48746a4feb6517fa409f6bf238e
HEAD is now at b4zad07 Initial commit
Jadi sekarang HEAD ada di komit sebelumnya, baik di lokal maupun jarak jauh:
$ git log
commit b4zad078237fa48746a4feb6517fa409f6bf238e
Author: me
Date: Tue Mar 18 12:46:59 2016 +0100
Initial commit