git常用命令及其錯誤的糾正

場景

回到上一次提交

這個問題,通常會有兩種情況;先說第一種情況
需要一個git的常用命令:git log – 查看日誌

1. 沒有 push

這種情況發生在你的本地代碼庫中,我們只做了addcommit,但是發現代碼有點問題,不能做提交;
那麼我們將使用reset命令恢復:

git reset [--soft | --mixed | --hard] <commit_id>

我們使用reset命令常見有三種類型:

  • --mixed: 保留源碼,只是將commitindex 信息回退到了某個版本,–mixed 是默認參數,可以省略不寫
  • --soft:保留源碼,只回退到commit信息到某個版本,不涉及index的回退,如果還是需要提交,直接commit即可.
  • --hard:不保留源碼,commitindex都回回退到某個版本(注意:此種方法慎用,會把自己新寫的代碼丟棄

如果你push代碼後,使用git reset --hard <commitID>回退到某個版本,這樣就會有一個問題,你先上代碼沒有變,indexcommit都沒有變,如果你修改本地代碼後進行push,你會發現代碼是衝突的

所以這種情況需要用用到下面的方法

2. 已經 push

如果你已經把所commit的代碼push了,你想退回到某個版本,相當於,你想讓服務器上的代碼退回到某個版本,本地代碼保持一致

那麼我們需要使用revert命令:

git revert <commit_id>

使用revert有幾個注意事項:

  • revert用於反轉提交
  • 執行evert命令時要求工作樹必須是乾淨的
  • revert用一個新提交來消除一個歷史提交所做的任何修改

使用方式:

  1. 我們使用revert以後,本地代碼就會回滾到某一個之前的版本版本
  2. 然後使用push命令,提交這個回滾的操作


拯救災難性的反回覆

這裏我們先說一下一個重要的命令:

git reflog

有時候使用Git工作得小心翼翼,特別是涉及到一些高級操作,例如resetrebasemerge。甚至一些很小的操作,例如刪除一個分支,我都擔心數據丟失。

這是後我們就要說一下reflog,它會記錄所有HEAD的歷史,也就是說當你做resetcheckout…等操作的時候,這些操作會被記錄在reflog中,有了這個東西,我們就不要太害怕數據丟失了。

下面我們來看一個例子:

我們首先看一下提交歷史:

$ git log --oneline
e66158d (HEAD -> master) 第三次提交
1bb2a89 第二次提交
a4c4e40 第一次提交

現在一共有三次提交,但是我想回到第一次提交的場景,我們使用reset命令,但是我不小心執行了下面的命令:

$ git reset --hard a4c4e40
HEAD is now at a4c4e40 第一次提交

這個時候我發現新的代碼全沒了,怎麼辦,難道工作白做了嗎?

我們知道git的修改都是指針的修改,只要我歷史做過某次提交,那麼我就一定能回到那個地方,只需要知道commit_id,但是怎麼知道,這個時候我們就可以用reflog命令了,他記錄了我的一切操作:

$ git reflog
a4c4e40 (HEAD -> master) HEAD@{0}: reset: moving to a4c4e40
e66158d HEAD@{1}: commit: 第三次提交
1bb2a89 HEAD@{2}: commit: 第二次提交
a4c4e40 (HEAD -> master) HEAD@{3}: commit (initial): 第一次提交

這樣我們就找到第三次提交的commit_id了,那麼用reset恢復吧

$ git reset --hard e66158d
HEAD is now at e66158d 第三次提交

代碼回來了,謝天謝地!!!





總結:

這裏附錄一下比較底層一個關於git的博客:https://www.cnblogs.com/kekec/p/9248487.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章