2014年3月3日 星期一

Git(八) 還原被修改的檔案

今天要談的是如何還原被修改的檔案,檔案被修改之後有分成兩種情況

  1. 修改的檔案尚未被push上remote端
  2. 修改的檔案已經被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掉。









沒有留言:

張貼留言