自然,你是不會犯錯的。不過現在是凌晨兩點,你正在趕乙份工作報告,你在readme.txt
中新增了一行:
$ cat readme.txtgit is a distributed version control system.
git is free software distributed under the gpl.
git has a mutable index called stage.
git tracks changes of files.
my stupid boss still prefers svn.
在你準備提交前,一杯咖啡起了作用,你猛然發現了stupid boss
可能會讓你丟掉這個月的獎金!
$ git statuson branch master
changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
你可以發現,git會告訴你,git checkout -- file
可以丟棄工作區的修改:
命令$ git checkout -- readme.txt
git checkout -- readme.txt
意思就是,把readme.txt
檔案在工作區的修改全部撤銷,這裡有兩種情況:
一種是readme.txt
自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt
已經新增到暫存區後,又作了修改,現在,撤銷修改就回到新增到暫存區後的狀態。
總之,就是讓這個檔案回到最近一次git commit
或git add
時的狀態。
現在,看看readme.txt
的檔案內容:
$ cat readme.txtgit is a distributed version control system.
git is free software distributed under the gpl.
git has a mutable index called stage.
git tracks changes of files.
檔案內容果然復原了。
git checkout -- file
命令中的--
很重要,沒有--
,就變成了「切換到另乙個分支」的命令,我們在後面的分支管理中會再次遇到git checkout
命令。
現在假定是凌晨3點,你不但寫了一些胡話,還git add
到暫存區了:
$ cat readme.txtgit is a distributed version control system.
git is free software distributed under the gpl.
git has a mutable index called stage.
git tracks changes of files.
my stupid boss still prefers svn.
$ git add readme.txt
慶幸的是,在commit
之前,你發現了這個問題。用git status
檢視一下,修改只是新增到了暫存區,還沒有提交:
$ git statuson branch master
changes to be committed:
(use "git reset head ..." to unstage)
modified: readme.txt
git同樣告訴我們,用命令git reset head
可以把暫存區的修改撤銷掉(unstage),重新放回工作區:
$ git reset head readme.txtunstaged changes after reset:
m readme.txt
git reset
命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用head
時,表示最新的版本。
再用git status
檢視一下,現在暫存區是乾淨的,工作區有修改:
$ git statuson branch master
changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: readme.txt
還記得如何丟棄工作區的修改嗎?
$ git checkout -- readme.txt$ git status
on branch master
nothing to commit, working tree clean
整個世界終於清靜了!
現在,假設你不但改錯了東西,還從暫存區提交到了版本庫,怎麼辦呢?還記得版本回退一節嗎?可以回退到上乙個版本。不過,這是有條件的,就是你還沒有把自己的本地版本庫推送到遠端。還記得git是分布式版本控制系統嗎?我們後面會講到遠端版本庫,一旦你把stupid boss
提交推送到遠端版本庫,你就真的慘了……
又到了小結時間。
場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file
。
場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset head
,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠端庫。
git學習筆記 管理 撤銷修改
git add readme.txt git status 位於分支 master 要提交的變更 使用 git reset head 檔案 以取消暫存 git commit m git tracks changes master 376d9c0 git tracks changes 1 file c...
Git學習之撤銷修改
git跟蹤並管理的是修改,而非檔案。每次修改,如果不用git add到暫存區,那就不會加入到commit中,要麼全部改完後,再add commit 要麼改一點,就add commit。撤銷修改 場景1 當你該亂工作區某個檔案內容,想直接丟棄修改是,用命令 場景2 當你不僅改亂了工作區某個檔案的內容,...
git 修改 撤銷
git status 初始狀態是,什麼都沒有修改 on branch master nothing to commit working directory clean 修改了乙個檔案fu 狀態變成 root 172.18 4.100 gitlearn git status on branch mas...