1. 程式人生 > >GIT學習----第六節:撤銷修改

GIT學習----第六節:撤銷修改

學習目的

  1. 當你在工作區修改了,但是你不想要修改的部分時,如何撤銷?
  2. 當你將工作區的修改新增到暫存區,如何撤銷?
  3. 當你將修改提交到分支,如何撤銷?

撤銷工作區修改

  1. 修改前
$ git diff
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。
  1. 修改後
$ git diff
diff --git a/readme.txt b/readme.txt
index 1149d4c..3bbbb47 100644
--- a/readme.txt
+++ b/readme.txt
@@ -6,4 +6,5 @@ Git is free software.
 cat 命令測試。
 測試修改檔案後各區狀態!
 測試git diff,檢視工作區和分支檔案的修改情況!
-再次測試git diff對比工作區和版本庫最新版本的區別。
\ No newline at end of file
+再次測試git diff對比工作區和版本庫最新版本的區別。
+測試撤銷修改。
\ No newline at end of file
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。
測試撤銷修改。
  1. 檢視修改後工作區的狀態
$ 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.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的檔案內容:

$ git diff
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。

可以看出工作區的檔案已經回到修改之前的版本!

注意:git checkout – file命令中的–很重要,沒有–,就變成了“切換到另一個分支”的命令,我們在後面的分支管理中會再次遇到git checkout命令。

撤銷暫存區修改

  1. 修改前
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。
  1. 修改後並新增到暫存區
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。
修改新增到暫存區測試撤銷!

$ git add readme.txt

2.1 檢視狀態

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   readme.txt

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

$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

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

2.2 再次檢視狀態

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

no changes added to commit (use "git add" and/or "git commit -a")

Git會告訴你,git checkout – file可以丟棄工作區的修改,同時檢視狀態:

$ git checkout -- readme.txt

$ git status
On branch master
nothing to commit, working tree clean
  1. 撤銷後
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。

撤銷分支修改

  1. 修改前
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。
  1. 修改後並提交到分支
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。
修改提交到分支測試!

$ git add readme.txt

$ git commit -m "提交到分支的修改進行撤銷提交"
[master 076ec5c] 提交到分支的修改進行撤銷提交
 1 file changed, 2 insertions(+), 1 deletion(-)
  1. 撤銷到上個版本
$ git reset --hard HEAD^
HEAD is now at ffb306a 再次測試git diff提交測試
  1. 撤銷後檢視工作區內容
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
新增一行測試工作區、暫存區、分支。
cat 命令測試。
測試修改檔案後各區狀態!
測試git diff,檢視工作區和分支檔案的修改情況!
再次測試git diff對比工作區和版本庫最新版本的區別。

發現的確被撤銷了!世界完美了!

小結

  1. 工作區撤銷修改:git checkout – file.
  2. 暫存區撤銷修改:(1)git reset HEAD ;(2)git checkout – file.
  3. 分支撤銷修改:git reset --hard HEAD^.
  4. 特別注意此處撤銷,是沒有推送到遠端版本庫的撤銷!沒有推送到遠端版本庫的撤銷!沒有推送到遠端版本庫的撤銷!重要的事說三遍!

其他

QQ交流群: 264303060

QQ交流群

遊戲列表