Git使用小技巧之回滾和撤銷

想要獲取更多文章能夠訪問個人博客 - 代碼無止境git

平常的開發,咱們不免會建立錯誤的git提交記錄,整個時候git給咱們提供了兩個命令來解決這個問題。一個命令是git reset,另外一個是git revert。二者有啥區別呢?二者主要的區別是,git reset命令是回滾某次提交,被回滾的提交將不會出如今提交記錄中,而git revert命令是建立一個新的提交來達到撤銷的目的,被撤銷的提交和撤銷的提交都會出如今提交記錄中。bash

準備

首先呢,咱們仍是須要準備一個git倉庫,而且準備一個能夠修改的文件,文件名無所謂,我這裏就建立了一個README.md文件:ui

mkdir git-test
cd git-test
git init
touch README.md
git add *
git commit -m "init"
複製代碼

git reset

1.修改README文件。 2.提交此次修改。spa

git commit "錯誤的提交"
複製代碼

3.假設剛剛的提交是個錯誤的,咱們須要回退,這個是個git reset命令就有用武之地了,咱們可使用它回退到指定的提交。指針

$ git reset e431092f22a85deebf7bd6f4f96d9943530b49bf
Unstaged changes after reset:
M       README.md
複製代碼

4.咱們在使用git status查看狀態,會發現README文件處於一個被修改的狀態,而且內容沒有發生變化。也就是說git reset會將本地倉庫的指針知到你指定的分支,可是內容不會丟棄,而是放到了工做區,若是你想再次提交仍是能夠的。日誌

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
複製代碼

若是你想直接丟棄掉,能夠加上--hard參數便可。其實git reset有三種回滾方式:code

git reset --hard <回滾分支>
git reset --soft <回滾分支>
git reset --mixed <回滾方式>
複製代碼
  • --hard回滾分支到當前所在分支之間修改的內容將會被徹底丟棄掉。
  • --soft會將修改的內容放到暫存區,你仍然可使用git commit命令提交。
  • --mixed則是reset的默認參數,也就是你不指定參數的話,會默認使用--mixed回滾,這種回滾方式會將修改的內容放到工做區。

git revert

有些狀況下咱們可能不太但願錯誤的提交記錄被徹底抹除掉,仍是但願它保存在git的提交記錄中,萬一咱們撤銷出錯了還能夠有補救的機會。這中狀況下咱們就須要使用git revert命令來實現。cdn

1.咱們來查看下當前git倉庫的提交記錄。開發

$ git log
commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299 (HEAD -> master)
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 23 18:08:30 2019 +0800

    錯誤的提交

commit e431092f22a85deebf7bd6f4f96d9943530b49bf
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 23 17:23:44 2019 +0800

    init
複製代碼

2.如今咱們須要將這個錯誤的提交撤銷掉,執行下面的命令就能夠了。get

git revert 28aef5f811895f7124a3ae0e3b095a37ef9cb299
複製代碼

在執行的過程當中會跳出來一個VI編輯界面,讓咱們編輯撤銷提交的message信息,默認爲Revert "被撤銷提交的message",固然咱們能夠進行編輯。 3.在使用git log命令查看提交日誌,咱們會發現被撤銷的提交和撤銷的提交都出如今提交記錄中,而後你去查看README文件的內容,會發現已經回滾回去了。

$ git log
commit ef836162c8f4cf75086151e517339789dd937453 (HEAD -> master)
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 23 18:13:27 2019 +0800

    Revert "錯誤的提交"

    This reverts commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299.

commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 23 18:08:30 2019 +0800

    錯誤的提交

commit e431092f22a85deebf7bd6f4f96d9943530b49bf
Author: 代碼無止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 23 17:23:44 2019 +0800

    init
複製代碼

結束語

這篇文章,主要是講了回滾錯誤提交的兩種方式,平時的使用場景仍是挺多的,但願對你們可以有所幫助。最後若是你喜歡個人文章,能夠掃描下方二維碼關注代碼無止境公衆號,謝謝你們的支持。

掃碼關注「代碼無止境」
相關文章
相關標籤/搜索