Git 撤銷修改

2022-04-14 01:03:18 字數 3566 閱讀 2205

自然,你是不會犯錯的。不過現在是凌晨兩點,你正在趕乙份工作報告,你在readme.txt中新增了一行:

$ cat readme.txt

git 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 status

# on 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 commitgit add時的狀態。

現在,看看readme.txt的檔案內容:

$ cat readme.txt

git 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.txt

git 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 status

# on branch master

# changes to be committed:

# (use "git reset head ..." to unstage)

## modified: readme.txt

#

git同樣告訴我們,用命令git reset head file可以把暫存區的修改撤銷掉(unstage),重新放回工作區:

$ git reset head readme.txt

unstaged changes after reset:

m readme.txt

git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用head時,表示最新的版本。

再用git status檢視一下,現在暫存區是乾淨的,工作區有修改:

$ git status

# on 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 checkout -- readme.txt

$ git status

# on branch master

nothing to commit (working directory clean)

整個世界終於清靜了!

現在,假設你不但改錯了東西,還從暫存區提交到了版本庫,怎麼辦呢?還記得版本回退一節嗎?可以回退到上乙個版本。不過,這是有條件的,就是你還沒有把自己的本地版本庫推送到遠端。還記得git是分布式版本控制系統嗎?我們後面會講到遠端版本庫,一旦你把「stupid boss」提交推送到遠端版本庫,你就真的慘了……

又到了小結時間。

場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file

場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset head file,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠端庫。

git 修改 撤銷

git status 初始狀態是,什麼都沒有修改 on branch master nothing to commit working directory clean 修改了乙個檔案fu 狀態變成 root 172.18 4.100 gitlearn git status on branch mas...

Git撤銷修改

撤銷修改 加入在readme中加入了不想要的語言,在沒提交之前,使用 git status 檢視可以得到如下 遇到這種情況可以手動刪除,也可以使用 git checkout file命令丟棄工作區的修改。如圖,新的文件中取出了新增的部分。git checkout readme.txt會遇到兩種情況。...

git 撤銷修改

命令 git checkout file 命令git checkout readme.txt意思就是,把readme.txt檔案在工作區的修改全部撤銷,這裡有兩種情況 一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態 一種是readme.txt已經新增...