備注:
本文參考於廖雪峰老師的博客Git教程。依照其博客進行學習和記錄,感謝其無私分享,也歡迎各位查看原文。
知識點
-
Git跟蹤和管理的的是修改,而不是文件
-
git checkout -- file
,會將文件撤銷到和git add
時的狀態一樣,即git checkout -- file
會將工作區的文件撤銷到與暫存區(stage)一致 -
git checkout -- file
命令中,如果沒有--
,就變成了“切換到另一個分支”的命令 -
git reset HEAD file
既可以回退版本,也可以把添加到暫存區的修改回退到工作區,HEAD
表示最新版本 -
刪除文件,
git rm file
,git commit -m"..."
管理修改
Git不同於其他版本控制系統,Git跟蹤和管理的的是修改,而不是文件
新增一行、刪除一行、修改字符、刪除又增加內容、創建新文件等,都是修改
Git通過提交放入暫存區的修改,用來管理修改,而不是管理原文件。
撤銷修改
在實際中,(雖然不常發生)總是會出現發生一些問題需要撤銷修改。
- 比如:在文件中添加一行無意義的特殊字符
liu@liu-virtual-machine:~/gitTest$ cat readme.txt
`this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file
$%^%&^*&&(**)(*)*&^*(*&&*&YTRYYIN
沒有git add
添加到暫存區時的撤銷
- 此時,查看
git status
如下:
liu@liu-virtual-machine:~/gitTest$ git status
位於分支 master
尚未暫存以備提交的變更:
(使用 "git add <文件>..." 更新要提交的內容)
(使用 "git checkout -- <文件>..." 丟棄工作區的改動)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
- Git提示,
git checkout -- file
可以丟棄工作區的改動
git checkout -- readme.txt
git checkout -- readme.txt
會把readme.txt
文件在工作區的修改全部撤銷。
git checkout -- file
,會將文件撤銷到和git add
時的狀態一樣,即git checkout -- file
會將工作區的文件撤銷到與暫存區(stage)一致
git checkout -- file
作用在暫存區(stage),當git add添加到暫存區后,git status不在顯示git checkout -- file
命令提示
可自行測試
- 此時文件內容就回到了原來狀態
$ cat readme.txt
`this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file
git checkout -- file
命令中,如果沒有--
,就變成了“切換到另一個分支”的命令
git add
添加到暫存區后的撤銷
當我們git add
后,發現需要撤銷,此時查看git status
狀態
$ git status
位於分支 master
要提交的變更:
(使用 "git reset HEAD <文件>..." 以取消暫存)
修改: readme.txt
Git提示,使用 git reset HEAD file
可以把添加到暫存區的修改撤銷(unstage
)
$ git reset HEAD readme.txt
重置后取消暫存的變更:
M readme.txt
-
git reset
既可以回退版本,也可以把添加到暫存區的修改回退到工作區,HEAD
表示最新版本 -
此時查看
git status
,暫存區沒有修改,是干凈的,工作區有修改。
$ git status
位於分支 master
尚未暫存以備提交的變更:
(使用 "git add <文件>..." 更新要提交的內容)
(使用 "git checkout -- <文件>..." 丟棄工作區的改動)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
- 現在可以使用
git checkout -- readme.txt
丟棄工作區的修改。然后查看,修改的文件已經回到原來狀態
$ git checkout -- readme.txt
$ cat readme.txt
`this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file
撤銷成功
git commit提交后的撤銷
對於已經commit
提交到版本庫的撤銷,可以使用版本回退更改。
如果你提交了遠程倉庫,則需要另行處理。
刪除文件
Git中,刪除也是一個修改操作.
首先新建一個test.txt
文件,添加並提交到倉庫
- 當我們把目錄下的文件刪除后
$ rm test.txt
- 此時,工作區和版本庫變得不一致
$ git status
位於分支 master
尚未暫存以備提交的變更:
(使用 "git add/rm <文件>..." 更新要提交的內容)
(使用 "git checkout -- <文件>..." 丟棄工作區的改動)
刪除: test.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
git status
指出刪除了test.txt
文件。
- 現在有兩種操作:1、確定從版本庫中刪除文件,2、從暫存區把誤刪的文件恢復
確定從版本庫中刪除文件
- 使用
git rm
刪除文件並git commit提交
$ git rm test.txt
rm 'test.txt'
$ git status
位於分支 master
要提交的變更:
(使用 "git reset HEAD <文件>..." 以取消暫存)
刪除: test.txt
$ git commit -m"remove test.txt"
[master 6a0f133] remove test.txt
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 test.txt
$ git status
位於分支 master
無文件要提交,干凈的工作區
從暫存區把誤刪的文件恢復
- 使用
git checkout -- file
從暫存區恢復誤刪的文件(本質還是丟棄工作區的改動)
$ git checkout -- test.txt