天天看點

2017-02-16-Git-代碼復原git revert 和 git reset 的差別

git revert 和 git reset 的差別

先看圖:

2017-02-16-Git-代碼復原git revert 和 git reset 的差別

sourceTree 中 revert 譯為**

送出復原

**,作用為忽略你指定的版本,然後送出一個新的版本。新的版本中已近删除了你所指定的版本。

reset 為 重置到這次送出,将内容重置到指定的版本。

git reset

指令後面是需要加2種參數的:

–-hard

–-soft

。這條指令預設情況下是

-–soft

執行上述指令時,這該條commit号之 後(時間作為參考點)的所有commit的修改都會退回到git緩沖區中。使用

git status

指令可以在緩沖區中看到這些修改。而如果加上

-–hard

參數,則緩沖區中不會存儲這些修改,git會直接丢棄這部分内容。可以使用

git push origin HEAD --force

強制将分區内容推送到遠端伺服器。

代碼回退

預設參數

-soft

,所有commit的修改都會退回到git緩沖區

參數

--hard

,所有commit的修改直接丢棄

$ git reset --hard HEAD^ 		回退到上個版本
$ git reset --hard commit_id	退到/進到 指定commit_id
           

推送到遠端

$ git push origin HEAD --force
           

可以吃的後悔藥->版本穿梭

當你復原之後,又後悔了,想恢複到新的版本怎麼辦?

git reflog

列印你記錄你的每一次操作記錄

$ git reflog

輸出:
c7edbfe [email protected]{0}: reset: moving to c7edbfefab1bdbef6cb60d2a7bb97aa80f022687
470e9c2 [email protected]{1}: reset: moving to 470e9c2
b45959e [email protected]{2}: revert: Revert "add img"
470e9c2 [email protected]{3}: reset: moving to 470e9c2
2c26183 [email protected]{4}: reset: moving to 2c26183
0f67bb7 [email protected]{5}: revert: Revert "add img"
           

找到你操作的id如:

b45959e

,就可以回退到這個版本

$ git reset --hard b45959e