git的設計思想並不是管理檔案,而是管理修改,什麼是修改呢?新增一行,刪除一行,更改某些字元,刪了一些又增加一些,甚至建立乙個檔案都是修改。
下面有乙個小實驗來說明這個問題:
1.對read.txt增加一行,然後新增到暫存區:
發現有乙個待提交的檔案。
現在再次修改read.txt檔案,修改什麼你隨意吧。
2.現在直接執行提交:
你會發現還是有未提交的,說明第二次修改並沒有被提交,這是為什麼?
這是因為你第一次操作把檔案放到了暫存區,而第二操作你並沒有執行git add
命令新增到暫存區,git commit
只會是把暫存區的修改給提交了,第二次沒有放入暫存區的修改並不會被提交。
如果你想提交第二次修改,你可以再執行一次git add
,把暫存區的兩個檔案合併後再執行git commit
,這樣第二次修改就會被提交。
總之,每次修改如果不git add
到暫存區,執行git commit
是不會提交本次修改的。
那麼怎麼插銷修改呢?
可以看到,上面是我看了一下修改了什麼地方,git提示我新加了一行,中間我用了撤銷指令,然後再看檔案,發現我上面新增的那一行沒有了。
說明一下:
命令git checkout -- read.txt
意思就是,把readme.txt檔案在工作區的修改全部撤銷,這裡有兩種情況:一種是read.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是read.txt已經新增到暫存區後,又作了修改,現在,撤銷修改就回到新增到暫存區後的狀態。
git checkout -- file
命令中的–很重要,沒有--
,就變成了「建立乙個新分支」的命令,我們在後面的分支管理中會再次遇到git checkout
命令。
現在你如果已經新增到了暫存區,發現不太對,想要撤回暫存區的內容,該怎麼做呢?
用命令git reset head file
可以把暫存區的修改撤銷掉(unstage),重新放回工作區:
我新增了檔案,然後又撤回了,現在再看一下狀態:
比較上面兩張圖不同的狀態,你會發現我們把放到暫存區的檔案又插銷回來了,重新放回了工作區。
如果你已經提交到了版本庫,那就只能用前面的所講的版本回退功能了,自己去前面找吧。
如果我們錯刪了檔案read.txt,那麼怎麼找回呢?
下面來舉個例子:
1.如果我刪除了工作區的read.txt檔案:
如果你是誤刪的,怎麼恢復?先來看一下狀態:
因為我們的版本庫還沒有刪除,git發現工作區與版本庫不一致了,所以會提醒你read.txt已經刪除,現在如果你想恢復的話,執行指令git checkout -- read.txt
:
你會發現這個檔案又回來了。
但如果你就是想刪除這個檔案,並且在版本庫中你也想刪除它,那就用命令git rm
刪掉,並且git commit
提交一下修改:
其實刪除也是修改,好好消化一下修改的指令
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 tag即可打標籤,並可用git tag檢視所有標籤 預設標籤是打在最新提交的commit上的,若想在過去的提交上打標籤則需要找到歷史提交的commit id,然後打上標籤即可。比如我想在add test.txt這個commi...
GIT學習 第五節 管理修改
如何跟蹤修改檔案?如何管理修改檔案?工作區 cat readme.txt git is a version control system.git is free software.git is a distributed version control system.git is free soft...