檔案狀態
在前面幾個章節,介紹完 git 的基本指令之後,我們現在要來說明 git 的檔案狀態
Git 將 "尚未被提交" 的檔案分成三個區塊,由上而下分別是
- Changes to be committed(將要提交的檔案)
- Changes not staged for commit(被更動但尚未要提交的檔案)
- Untracked files(未被追蹤的檔案)
Untracked files(未被追蹤的檔案)
意指完全新加入的檔案,不曾被提交過
由於 git 只會去追蹤(track)被提交過(committed)的檔案的被修改狀態,而不會去追蹤新進的檔案
因此這類型屬於 Untracked files
Untracked files: (use "git add <file>..." to include in what will be committed)
_assets/git_config_local.png
use "git add <file>..." to include in what will be committed
使用
git add <file>
的指令,使檔案狀態改為 Changes to be committed
Changes not staged for commit(被更動但尚未要提交的檔案)
這一類的檔案,都是先前就已經被提交過的檔案
git 會去 track 這些檔案的狀態,當檔案被修改(modified)或是刪除(deleted)的時候,就會出現在這裡
這裡所有的檔案(modified & deleted)可以使用
git add -u
一次全部轉到綠色區塊
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory)
modified: 01_local/file_status.md modified: SUMMARY.md
use "git add <file>..." to update what will be committed
使用
git add <file>
的指令,使檔案狀態改為 Changes to be committed若狀態為 deleted 的檔案,必須要用
git rm <file>
才能轉到 Changes to be committed 區塊某些較新版本的 git 才可以用
git add
加入 "被刪除" 的檔案use "git checkout -- <file>..." to discard changes in working directory
使用
git checkout -- <file>
的指令,使檔案回到 "未修改" 前的樣子
Changes to be committed(將要提交的檔案)
這些是我們透過 git add, rm, mv
轉移過來的檔案
在執行 git commit
之後,將會被一起提交到一個 patch 裡面
Changes to be committed: (use "git reset HEAD <file>..." to unstage)
modified: 01_local/SUMMARY.md new file: 01_local/file_status.md
use "git reset HEAD <file>..." to unstage
使用
git reset HEAD <file>
可以將檔案還原到 "未準備提交" 前的狀態若使用
git reset HEAD
而後面不帶<file>
的話,會將這個區塊 "所有" 的檔案都一併還原到 "未準備提交" 前的狀態HEAD
是 git 特殊的關鍵字,用來表示你目前所在的 patch 的位置(我們後面會在做詳細的說明)
本章回顧
這些狀態切換的指令都不需要去記他
因為在做 git status
的時候,每個區塊都會有指令提示
只要心裡對這個圖有個概念就好了
Git 官方網站有關於檔案狀態的介紹 [英文版] [中文版]
我覺得看
File Status Lifecycle
的圖並不是很好理解,不過大家還是可以參考一下