git add b.txt rm b.txt git commit -m '删除b.txt文件'
我執行了第三行commit之後提示
commit
On branch master Changes not staged for commit: deleted: b.txt no changes added to commit
然後我再git checkout -- b.txt 還能恢復到暫存區?為什麼沒有徹底刪除掉?
git checkout -- b.txt
新手呀。 。 。寫點兒教程唄。 。 。 。 。
從原理上說, git 在本地有三個不同的保存檔案的位置。
Working tree: 這個代表的就是你能看到的所有文件以及資料夾
index: 這個其實是和下面的版本庫一樣都保存在.git文件夾裡面(在此不討論保存的格式)
.git
版本庫: 保存了所有提交的版本。
在所有東西都提交之後,WorkingTree、index 區和版本庫中最新的提交內容是一模一樣的。
git add 的意思是用 WorkingTree中的文件替换/更新index区中的文件。因此git add b.txt之后就是用当前保存的b.txt更新index中的 b.txt 檔案。
git add
git add b.txt
b.txt
rm b.txt 仅仅是一条 linux 命令,就是删除文件的意思。对git来说这样只是在WorkingTree中删除了b.txt。
rm b.txt
git commit 的意思是把 index 中的文件打包起来放入版本库。由于此时b.txt还在 index 区,所以git commit 仍旧会把b.txt更新到版本庫中。
git commit
Changes not staged for commit: deleted: b.txt
這裡顯示了當前WorkingTree和index區的區別:當前WorkingTree中刪除了b.txt文件,但是index還存在這個文件。
no changes added to commit
這個提示應該說是一個警告,由於git commit 的意思是把index區的內容打包放入版本庫,可是由於之前commit過了,而且沒有add新的東西,所以index區的內容和最新提交是一樣的,git沒有必要再保存一次,所以顯示“沒有東西可以commit”
git rm 這條指令的意義是從index區和WorkingTree中刪除某個文件,所以git rm b.txt之後index中就沒有了git rm 这条命令的意义是从index区和WorkingTree中删除某个文件,所以git rm b.txt之后index中就没有了b.txt。 就這樣
git rm
git rm b.txt
git checkout 的意思是用branch中最新的提交更新WorkingTree和index區中的內容。由於不可逆,所以如果這兩個地方的內容沒有提交到版本庫的話這條指令會給予提示。 git checkout <branch> 的意思是用branch中最新的提交更新WorkingTree和index区中的内容。由于不可逆,所以如果这两个地方的内容没有提交到版本库的话这条命令会给出提示。git checkout -- filename的意思是用index区的内容替换WorkingTree的某个文件--git checkout -- filename的意思是用index區的內容取代WorkingTree的某個檔案--是可選的,表示這個參數之後的都是檔案名。 (因為有些時候分支/Tag有可能與檔案重名)
git checkout
git checkout <branch>
git checkout -- filename
--
額外附加一條指令。 。 。 git status 這個的意思是顯示 WorkingTree和index區的不同(預設是紅色),index和最新已經提交版本的區別(預設是綠色?深綠?)。另外會有提示如果在他們之間互相更新的方法。
git status
嘗試git rm filename
git rm filename
題主首先需要知道git 為什麼需要add 這個動作,因為git 最開始是只有命令列的,所以add 的操作相當於GUI 下的檔案選取操作,因此add 和commit 操作應該看成一個整體(就像GUI下選中文件就可以提交了),而不應該割裂開來。
1.git add b.txt //把b.txt從工作區加到暫存區(stage)2.rm b.txt //把工作區的b.txt刪除,但沒有執行git rm b. txt從版本庫中刪除該檔案3.git commit -m '刪除b.txt檔案'//由於沒有執行git rm b.txt,commit提交的只是1中的內容-->2,3之間應該要執行git rm b.txt,才能把檔案刪除
提醒下樓主注意,在git中修改檔案名稱和刪除檔案其實是差不多的,就像樓上說的,要使用git rm和git mv指令來分別操作,有本書叫做git權威指南,樓主可以好好看看看
.刪除文件: 在工作區中刪除一個文件,rm 文件名 有兩種情況: 第一種情況:需要版本庫中也刪除該文件. git rm 檔案名稱 git commit -m '描述' 二種情況:m '描述' 第二種情況:m '描述'
少加了一個git rm前面
新手呀。 。 。寫點兒教程唄。 。 。 。 。
從原理上說, git 在本地有三個不同的保存檔案的位置。
Working tree: 這個代表的就是你能看到的所有文件以及資料夾
index: 這個其實是和下面的版本庫一樣都保存在
.git
文件夾裡面(在此不討論保存的格式)版本庫: 保存了所有提交的版本。
在所有東西都提交之後,WorkingTree、index 區和版本庫中最新的提交內容是一模一樣的。
git add
的意思是用 WorkingTree中的文件替换/更新index区中的文件。因此git add b.txt
之后就是用当前保存的b.txt
更新index中的 b.txt 檔案。rm b.txt
仅仅是一条 linux 命令,就是删除文件的意思。对git来说这样只是在WorkingTree中删除了b.txt
。git commit
的意思是把 index 中的文件打包起来放入版本库。由于此时b.txt
还在 index 区,所以git commit
仍旧会把b.txt
更新到版本庫中。這裡顯示了當前WorkingTree和index區的區別:
當前WorkingTree中刪除了
b.txt
文件,但是index還存在這個文件。這個提示應該說是一個警告,由於
git commit
的意思是把index區的內容打包放入版本庫,可是由於之前commit過了,而且沒有add新的東西,所以index區的內容和最新提交是一樣的,git沒有必要再保存一次,所以顯示“沒有東西可以commit”git rm
這條指令的意義是從index區和WorkingTree中刪除某個文件,所以git rm b.txt
之後index中就沒有了git rm
这条命令的意义是从index区和WorkingTree中删除某个文件,所以git rm b.txt
之后index中就没有了b.txt
。 就這樣git checkout
的意思是用branch中最新的提交更新WorkingTree和index區中的內容。由於不可逆,所以如果這兩個地方的內容沒有提交到版本庫的話這條指令會給予提示。git checkout <branch>
的意思是用branch中最新的提交更新WorkingTree和index区中的内容。由于不可逆,所以如果这两个地方的内容没有提交到版本库的话这条命令会给出提示。git checkout -- filename
的意思是用index区的内容替换WorkingTree的某个文件--
git checkout -- filename
的意思是用index區的內容取代WorkingTree的某個檔案--
是可選的,表示這個參數之後的都是檔案名。 (因為有些時候分支/Tag有可能與檔案重名)額外附加一條指令。 。 。
git status
這個的意思是顯示 WorkingTree和index區的不同(預設是紅色),index和最新已經提交版本的區別(預設是綠色?深綠?)。另外會有提示如果在他們之間互相更新的方法。嘗試
git rm filename
題主首先需要知道git 為什麼需要add 這個動作,因為git 最開始是只有命令列的,所以add 的操作相當於GUI 下的檔案選取操作,因此add 和commit 操作應該看成一個整體(就像GUI下選中文件就可以提交了),而不應該割裂開來。
1.git add b.txt //把b.txt從工作區加到暫存區(stage)
2.rm b.txt //把工作區的b.txt刪除,但沒有執行git rm b. txt從版本庫中刪除該檔案
3.git commit -m '刪除b.txt檔案'//由於沒有執行git rm b.txt,commit提交的只是1中的內容
-->2,3之間應該要執行git rm b.txt,才能把檔案刪除
提醒下樓主注意,在git中修改檔案名稱和刪除檔案其實是差不多的,就像樓上說的,要使用git rm和git mv指令來分別操作,有本書叫做git權威指南,樓主可以好好看看看
.刪除文件:
第二種情況:則刪除該檔案》。在工作區中刪除一個文件,rm 文件名
有兩種情況:
第一種情況:需要版本庫中也刪除該文件.
git rm 檔案名稱
git commit -m '描述'
二種情況:m '描述'
第二種情況:m '描述'
少加了一個git rm前面