- 修改的檔案尚未被push上remote端
- 修改的檔案已經被push上remote端
修改的檔案尚未被push上Remote端
如上圖,我在local端做了一些修改做了3個commit ha, hb, hc
但是我尚未push 到remote端,這時候我發現hb這個commit 改了我不希望被更動的東西,我希望remove hb這個commit ,這時候可以使用 git rebase -i HEAD_SHA (其中 HEAD_SHA = origin/HEAD的 SHA)
接著會出現如上圖,這時候只需要將 hb這行刪除就可以了。
然後就會看到
hb這個commit 已經消失了。
如果只是想要移除上一個commit 例如 我commit 了ha hc ,然後我希望將hc這個commit 移除
這時候也可以直接使用 git reset --hard HEAD^ 這樣就會將版本退回ha commit
對reset這個command有興趣的話可以參考
Git 常用指令 (一) git reset
Git 常用指令 (五) reset 應用 merge 和 rebase之後的倒回
上面的方法很方便,但是這些方法僅限於使用在commit 尚未被push到remote端之前
假設commit 已經被push到remote端這就麻煩了,就只能只用下面的方式來修改。
修改的檔案已經被push上Remote端
如下圖,假設我commit並push了 ha 到remote端上
在我commit之後我希望reverse這個commit ,這時候可以使用
git revert ha_SHA (其中 ha_SHA為 ha這個commit 的SHA)
這樣就可以將 ha這個commit reverse 。
假設我今天merge 了一個branch helloo,但是在merge之後後悔了,希望將這個merge revert
如下圖
這時候我必須使用 git revert -m 1 Merge_Branch_helloo_SHA
(其中 Merge_Branch_helloo_SHA的 SHA為 merge branch helloo的SHA)
假設未來希望將revert merge的版本還原,就必須再一次revert版本(merge branch將不會work),
這樣就能將原本的版本覆原。
使用git 還原的時候要確切的知道自己在幹嘛,如果不是很確定的話,記得做備份的動作,否則一不小心可能會將寫好的檔案revert掉。
沒有留言:
張貼留言