1. 程式人生 > >淺談git撤銷回退命令相關用法

淺談git撤銷回退命令相關用法

初來公司實習,每次改完程式碼後都需要用程式碼管理工具git提交到程式碼庫。由於剛開始對 git 並不熟悉,只會簡單的 commit,push 指令,一旦提交出了問題需要撤銷回退的話就不知道該怎麼辦了。經過一段時間的研究,總算是把裡面相關原理搞懂了,遇到git提交出現問題,現在自己也能想辦法解決而不至於手足無措了。下面就說說我對git撤銷回退這塊相關的理解。

git reset

首先,我們要弄清以下三條命令的區別:

git reset –hard

git reset –soft

git reset

工作區,暫存區,本地倉庫,遠端倉庫的概念我在這裡就不介紹了。這是git最為基礎的概念,可自行百度。下面說說這三條 git reset 指令的區別:

git reset –hard: 重置工作區,暫存區,本地倉庫的所有檔案到某一節點。例如 git reset –hard HEAD^ 表示工作區,暫存區,本地倉庫的所有檔案全部回退到上一個節點,也就是說你從上一個節點到這個節點之間所做的修改全部被撤銷了。當然如果要回到特定的一個節點可以用 git reset –hard commitId 。通過指定要回到的節點值來回到對應的節點。

git reset –soft:只重置本地倉庫的檔案,工作區和暫存區的檔案不變。

git reset 等同於 git reset –mixed,只重置本地倉庫和暫存區檔案,工作區檔案不變。

當我們提交完並push程式碼到遠端倉庫後,發現程式碼有問題,想重新提交,首先在gerrit上abandon掉自己剛才上傳的程式碼,接著,用git reset HEAD^或者git reset –soft HEAD^回到上一個節點(git reset HEAD^後,使用git add .就相當於git reset –soft),不要用git reset –hard。因為這會把你本地工作區修改的全部撤銷,這樣你之前的修改就全沒了。雖然也有辦法再找回來,只要找到那次提交的commitId就可以了,下面會介紹。

另外,我們還可以用git reset file 來使一個已經新增到暫存區的file檔案重新返回到工作區。

git log

我們通過git log就可以檢視到每次提交的 commitId 了,如果嫌 git log 顯示的資訊過多,可以使用 git log –pretty=oneline 讓每次提交的關鍵資訊在一行顯示。但是如果使用了 git reset –hard,那麼使用 git log 只能看到你重置點之前的提交 commitId,無法看到重置點之後的提交 commitId,要想找到重置點之後的 commitId 可以用git reflog。

git checkout

git checkout有兩個作用,如果後面接的是檔名的話,如 git checkout file 可以將一個工作區的檔案撤銷其修改。如果後面接的是分支名的話,如 git checkout b表示的是切換到b分支。對於工作區新建立的檔案,用 git clean -df 可將其移除工作區。