首先明白一下基本概念和用法,這段話是從前在看廖雪峰的git教程的時候摘到OneNote的
准備工作:
- 新建了一個learngit文件夾,在bash中cd進入文件夾,用以下命令創建一個倉庫。
$ git init
- 添加一個文本文件one.txt,里面寫個內容 "one"。准備工作完成。文件夾情況如下:
實驗開始:
實驗一:沒有add,沒有commit
- 此時不對文件做任何提交,用git status 查看一下文件狀態:
說明是完全沒有 git add 的
- 進入文件夾,把文本文件 one.txt 中的內容加一行 “Two”。
- 回到bash窗口,嘗試用 git checkout -- file 命令恢復狀態,結果報錯:
說明沒有add,還想checkout,沒有什么意義可言,因為既不在暫存區,也沒有提交,所以就沒有所謂的恢復
實驗二:有add,但不commit
- 用 git add 把 文本文件添加到暫存區:
- 進入文件夾,把文本文件 one.txt 中的內容加一行 “Two”。
- 回到bash窗口,嘗試用 git checkout -- file 命令恢復狀態,啥也沒報。Unix哲學是沒有情況就是好情況。
- 打開 one.txt ,發現添加的那一行沒了,內容中又只剩下 "One"
實驗三:add又commit
- 確認一下:現在文本文件中內容是一行 "One",因為之前已經 add 過了,所以先用如下命令讓狀態恢復到連 add 也沒有過的時候
git rm --cached one.txt
效果會是這樣的:
好,又恢復到了沒有add的情況。
- 然后我們從頭開始 - -。。。其實我也不知道為啥要這樣,感覺和前面步驟相同比較好一點。。
- 用 git add 添加,然后用 git commit 提交,結果如下:成功提交
這時候,文本文件中只有一行"One",
- 進入文件夾,把文本文件 one.txt 中的內容加一行 “Two”。出現如下界面(說明修改過了)
- 回到bash窗口,嘗試用 git checkout -- file 命令恢復狀態,啥也沒報。Unix哲學是沒有情況就是好情況。
- 打開 one.txt ,發現添加的那一行沒了,內容中又只剩下 "One"
結論:必須要先add才存在恢復一說。 checkout 可以理解為“切回某個文件”的意思。但是要注意,這個命令是對工作區生效的。