Git中三種檔案狀態及其轉換

2021-09-07 18:17:09 字數 1158 閱讀 3927

git作為一種版本控制解決方案,由於其具有的分布式特性,正被越來越多的使用者熟知,一些有名的開源專案,如:linux kernel,cakephp,ruby on rails等,都在使用git進行版本管理。

在git中,檔案狀態是乙個非常重要的概念,不同的狀態對應不同的操作。因此,要想熟練掌握git的用法,需要了解git的幾種檔案狀態。

為了說明的方便,現在初始化乙個專案,也就是將專案所在目錄納入git的管理之下。假設專案目錄為hello_world,初始化之後,在目錄下新建readme.txt檔案,接著,使用「git status」檢視檔案狀態,如圖:

可以看到,git友好的標示出readme.txt為「untracked files」,並且提示使用「git add ...」的命令將檔案包含到待提交清單中。按照提示,使用「git add readme.txt」命令,然後,使用「git status」檢視檔案狀態,如圖:

檔案readme.txt狀態變成了「changes to be committed」,也就是說readme.txt在暫存區域生成了快照,等待被提交。正如git所提示的那樣,通過「git rm --cached readme.txt」命令,可以將檔案狀態還原為未暫存狀態,即回到「untracked files」檔案狀態。現在,readme.txt已經可以被提交到git目錄中了,但是暫時不提交。開啟readme.txt,向其中加些內容,儲存之後,用「git status」檢視,返回如圖資訊:

可以看到,除了之前的「changes to be committed」狀態,現在又多了一條「changes not staged for commit」狀態,表明檔案已經修改,但是還沒有放入暫存區域,也就是沒生成快照。如果現在進行commit操作,只是將修改之前的檔案快照提交到了git目錄,一定記住:只有暫存區域的檔案(即:檔案狀態為「changes to be committed」)才會被提交。正如提示,通過「git add readme.txt」命令將已修改檔案更新到暫存區域中,如果想撤銷修改,可以使用「git checkout -- readme.txt」命令。

正如上文所說,git在未進行commit操作之前,存在三種狀態:untracked files,changes not staged for commit及changes to be committed,每種狀態之間可以隨意進行互相轉換。了解這三種狀態各自所對應的不同情況,能夠幫助你方便有效的使用git來管理專案。

Git中三種檔案狀態及其轉換

git作為一種版本控制解決方案,由於其具有的分布式特性,正被越來越多的使用者熟知,一些有名的開源專案,如 linux kernel,cakephp,ruby on rails等,都在使用git進行版本管理。在git中,檔案狀態是乙個非常重要的概念,不同的狀態對應不同的操作。因此,要想熟練掌握git的...

Git中三種檔案狀態及其轉換

git作為一種版本控制解決方案,由於其具有的分布式特性,正被越來越多的使用者熟知,一些有名的開源專案,如 linux kernel,cakephp,ruby on rails等,都在使用git進行版本管理。在git中,檔案狀態是乙個非常重要的概念,不同的狀態對應不同的操作。因此,要想熟練掌握git的...

Git中三種檔案狀態及其轉換

git作為一種版本控制解決方案,由於其具有的分布式特性,正被越來越多的使用者熟知,一些有名的開源專案,如 linux kernel,cakephp,ruby on rails等,都在使用git進行版本管理。在git中,檔案狀態是乙個非常重要的概念,不同的狀態對應不同的操作。因此,要想熟練掌握git的...