How to undo a Git pull?

Posted by – June 24, 2013

不經一事,不長一智啊....

以前用 Git 幾乎都是一人專案,最近才開始有協同工作的專案。這天在 fetch 了新的進度後,就很順手 pull 了... 然後就爆了。

因為我忘記切換 branch 就 pull,結果被合併到別線上去了。還好只有我本機掛掉,大不了砍掉 repo 重建一次就好。

不過想想還是看一下怎麼回復上一動好了,StackOverflow 真是工程師的好朋友。

用此指令可以查 HEAD 變化的歷史紀錄。

$ git reflog show

結果如下

$ git reflog show
cc7cb8e HEAD@{0}: pull pic3@dropbox user/auth: Merge made by the 'recursive' str
3686266 HEAD@{1}: commit: Database Schema
ea26bdb HEAD@{2}: checkout: moving from ea26bdb27a04284e03a119207ade4602d78c06cf
ea26bdb HEAD@{3}: checkout: moving from user/auth to ea26bdb27a04284e03a119207ad
a6310cb HEAD@{4}: commit: user/auth dev
fbaa5a7 HEAD@{5}: checkout: moving from inc/bootstrap to user/auth
7401efb HEAD@{6}: commit: Twitter Bootstrap

可以看到上一個動作是 HEAD@{0} pull 的行為,所以要回復到 HEAD@{1} 的狀態。用以下指令回復。

$ git reset HEAD@{1}

剛回復後檔案會遺留剛剛合併後的檔案,把它們移除就可以了。收工。

References:

Leave a Reply

Your email address will not be published. Required fields are marked *