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 HEAD@{0}: reset: moving to c7edbfefab1bdbef6cb60d2a7bb97aa80f022687
470e9c2 HEAD@{1}: reset: moving to 470e9c2
b45959e HEAD@{2}: revert: Revert "add img"
470e9c2 HEAD@{3}: reset: moving to 470e9c2
2c26183 HEAD@{4}: reset: moving to 2c26183
0f67bb7 HEAD@{5}: revert: Revert "add img"
找到你操作的id如:b45959e
,就可以回退到這個版本
$ git reset --hard b45959e