Git使用小技巧之回滾與撤銷詳解
前言
日常的開發(fā),我們難免會創(chuàng)建錯誤的git提交記錄,整個時候git給我們提供了兩個命令來解決這個問題。一個命令是git reset,另一個是git revert。兩者有啥區(qū)別呢?兩者主要的區(qū)別是,git reset命令是回滾某次提交,被回滾的提交將不會出現(xiàn)在提交記錄中,而git revert命令是創(chuàng)建一個新的提交來達(dá)到撤銷的目的,被撤銷的提交和撤銷的提交都會出現(xiàn)在提交記錄中。
準(zhǔn)備
首先呢,我們還是需要準(zhǔn)備一個git倉庫,并且準(zhǔn)備一個可以修改的文件,文件名無所謂,我這里就創(chuàng)建了一個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.假設(shè)剛剛的提交是個錯誤的,我們需要回退,這個是個git reset命令就有用武之地了,我們可以使用它回退到指定的提交。
$ git reset e431092f22a85deebf7bd6f4f96d9943530b49bf Unstaged changes after reset: M README.md
4.我們在使用git status查看狀態(tài),會發(fā)現(xiàn)README文件處于一個被修改的狀態(tài),并且內(nèi)容沒有發(fā)生變化。也就是說git reset會將本地倉庫的指針知到你指定的分支,但是內(nèi)容不會丟棄,而是放到了工作區(qū),如果你想再次提交還是可以的。
$ 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參數(shù)即可。其實(shí)git reset有三種回滾方式:
git reset --hard <回滾分支> git reset --soft <回滾分支> git reset --mixed <回滾方式>
- --hard回滾分支到當(dāng)前所在分支之間修改的內(nèi)容將會被完全丟棄掉。
- --soft會將修改的內(nèi)容放到暫存區(qū),你仍然可以使用git commit命令提交。
- --mixed則是reset的默認(rèn)參數(shù),也就是你不指定參數(shù)的話,會默認(rèn)使用--mixed回滾,這種回滾方式會將修改的內(nèi)容放到工作區(qū)。
git revert
有些情況下我們可能不太希望錯誤的提交記錄被完全抹除掉,還是希望它保存在git的提交記錄中,萬一我們撤銷出錯了還可以有補(bǔ)救的機(jī)會。這中情況下我們就需要使用git revert命令來實(shí)現(xiàn)。
1.我們來查看下當(dāng)前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.現(xiàn)在我們需要將這個錯誤的提交撤銷掉,執(zhí)行下面的命令就可以了。
git revert 28aef5f811895f7124a3ae0e3b095a37ef9cb299
在執(zhí)行的過程中會跳出來一個VI編輯界面,讓我們編輯撤銷提交的message信息,默認(rèn)為Revert "被撤銷提交的message",當(dāng)然我們可以進(jìn)行編輯。
3.在使用git log命令查看提交日志,我們會發(fā)現(xiàn)被撤銷的提交和撤銷的提交都出現(xiàn)在提交記錄中,然后你去查看README文件的內(nèi)容,會發(fā)現(xiàn)已經(jīng)回滾回去了。
$ 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
結(jié)束語
這篇文章,主要是講了回滾錯誤提交的兩種方式,平時的使用場景還是挺多的,希望對大家能夠有所幫助。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
人工智能機(jī)器學(xué)習(xí)常用算法總結(jié)及各個常用算法精確率對比
這篇文章主要介紹了人工智能機(jī)器學(xué)習(xí)常用算法總結(jié)及各個常用算法精確率對比,需要的朋友可以參考下2020-03-03判斷Email地址是否正確的幾個函數(shù)(asp/php/javascript)
今天總結(jié)了幾個判斷Email地址的函數(shù),和大家分享一下2010-08-08