想要獲取更多文章可以訪問我的博客 - 代碼無止境。
日常的開發,我們難免會創建錯誤的git提交記錄,整個時候git給我們提供了兩個命令來解決這個問題。一個命令是git reset
,另一個是git revert
。兩者有啥區別呢?兩者主要的區別是,git reset
命令是回滾某次提交,被回滾的提交將不會出現在提交記錄中,而git revert
命令是創建一個新的提交來達到撤銷的目的,被撤銷的提交和撤銷的提交都會出現在提交記錄中。
准備
首先呢,我們還是需要准備一個git
倉庫,並且准備一個可以修改的文件,文件名無所謂,我這里就創建了一個README.md
文件:
mkdir git-test
cd git-test
git init
touch README.md
git add *
git commit -m "init"
git reset
1.修改README文件。
2.提交這次修改。
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
有三種回滾方式:
git reset --hard <回滾分支>
git reset --soft <回滾分支>
git reset --mixed <回滾方式>
--hard
回滾分支到當前所在分支之間修改的內容將會被完全丟棄掉。--soft
會將修改的內容放到暫存區,你仍然可以使用git commit
命令提交。--mixed
則是reset的默認參數,也就是你不指定參數的話,會默認使用--mixed
回滾,這種回滾方式會將修改的內容放到工作區。
git revert
有些情況下我們可能不太希望錯誤的提交記錄被完全抹除掉,還是希望它保存在git的提交記錄中,萬一我們撤銷出錯了還可以有補救的機會。這中情況下我們就需要使用git revert
命令來實現。
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.現在我們需要將這個錯誤的提交撤銷掉,執行下面的命令就可以了。
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