撤銷修改
GIT 撤銷修改蚌父,主要利用 git restore
命令。現(xiàn)在结缚,我們來假象一個使用場景。當我們大半夜戰(zhàn)至性頭時软棺,一上頭不小心在文件中寫了句不該寫的話"老板是個大煞筆"
红竭!并且已經(jīng) git add
到暫存區(qū)(staged) 中了!如果再繼續(xù)commit
的話喘落,第二天就面臨失業(yè)的風險茵宪!
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: READEME.md
從上面可以看到,有一個待提交文件瘦棋,并且還有一個重要的提示:use "git restore --staged <file>..." to unstage 稀火,翻譯過來就是,使用 git restore --staged <file>...
可以使文件變成已修改(未執(zhí)行 add
時 )狀態(tài)赌朋。
好的憾股,是時候展現(xiàn)真正的技術了,命令敲起來ヾ(???ゞ):
$ git restore --staged READEME.md
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: READEME.md
當我們執(zhí)行 store --staged
命令后箕慧,再用 status
查看狀態(tài),會發(fā)現(xiàn)茴恰,文件已經(jīng)變成 add 執(zhí)行前的狀態(tài)了颠焦。是的,這樣咱們就徹底保住了工作⊥妫現(xiàn)在劃重點伐庭,我們看下執(zhí)行 git restore --staged READEME.md
到底發(fā)生了什么。
git restore --staged [file]
: 表示從暫存區(qū)將文件的狀態(tài)修改成 unstage 狀態(tài)分冈。當然圾另,也可以不指定確切的文件 ,例如:
git restore --staged *.java
表示將所有暫存區(qū)的java文件恢復狀態(tài)
git restore --staged .
表示將當前目錄所有暫存區(qū)文件恢復狀態(tài)
--staged
參數(shù)就是表示僅僅恢復暫存區(qū)的
問題總結接踵而至雕沉,如果我不們不止執(zhí)行了 add
命令集乔,還執(zhí)行了 commit
命令。是不是也可以利用 restore
命令返回呢坡椒?答案是肯定的扰路。下面,我們介紹幾個命令倔叼。
可以看到汗唱,我我們又有錯別字了,但是已經(jīng)
commit
了丈攒,那么應該怎么辦呢哩罪?
$ git restore -s HEAD~1 READEME.md // 該命名表示將版本回退到當前快照的前一個版本
$ git restore -s 91410eb9 READEME.md // 改命令指定明確的 commit id 授霸,回退到指定的快照中
$ git reset --soft HEAD^ // 該命令表示撤銷 commit 至上一次 commit 的版本
總結
本篇文章的所有重點都集中在一個命令上 restore
,該命令主要有三個參數(shù)际插,我重點介紹一下碘耳,restore
命令,默認是帶著 --worktree
參數(shù)的
命令 | 作用 | 備注 |
---|---|---|
git restore --worktree README.md |
表示撤銷 README.md 文件工作區(qū)的的修改 | 參數(shù)等同于 -W |
git restore --staged README.md |
表示撤銷暫存區(qū)的修改腹鹉,將文件狀態(tài)恢復到未 add 之前 |
參數(shù)等同于 -S |
git restore -s HEAD~1 README.md |
表示將當前工作區(qū)切換到上個 commit 版本 | |
git restore -s dbv213 README.md |
表示將當前工作區(qū)切換到指定 commit id 的版本 |