Git 的文件狀態(tài)是其核心,明白文件狀態(tài)后對各種操作都有非常大的幫助热芹,不同的文件狀態(tài)又存儲在不同的工作區(qū)域中斋荞。
文件狀態(tài)
未跟蹤(untracked):表示文件為新增加的。
已緩存(staged):緩存區(qū)的文件都是這個狀態(tài)轴合。
已提交(committed):表示文件已保存在版本庫中创坞。
已修改(modified):表示修改了文件,但還沒保存到版本庫中受葛。
工作區(qū)域
工作區(qū):電腦里面的目錄题涨,比如上面的 git_test
文件夾讲冠。
緩存區(qū):存放在版本庫里面寇荧。所有經(jīng)過 git add
操作的文件都會到這個區(qū)域來捆探。
版本庫:隱藏目錄 .git
共耍。
上篇文章說了统阿,提交文件到版本庫是分為兩步的窄潭。
第一步執(zhí)行git add
把文件添加到緩存區(qū)帆卓。
第二部執(zhí)行git commit
把緩存區(qū)的文件提交到版本庫痢毒。
反正就是需要提交的文件修改通通放到緩存區(qū)澜建,然后向挖,一次性提交緩存區(qū)的所有修改到版本庫。
接著上一篇文章的操作再過一遍炕舵。向hello.md
寫入一些內(nèi)容何之,并創(chuàng)建一個新的文件test.txt
,內(nèi)容隨便寫就行咽筋。
$ echo "Hello Git" > hello.md
$ touch test.txt
$ echo "Hello Git Test" > test.txt
執(zhí)行git status
看一下狀態(tài)
$ git status
On branch master
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: hello.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
no changes added to commit (use "git add" and/or "git commit -a")
hello.md
被修改溶推,test.txt
從未被添加過,狀態(tài)是未跟蹤(untracked)。
接著把hello.md
和test.txt
都添加金緩存區(qū)蒜危,執(zhí)行git status
看一下狀態(tài)虱痕。
$ git add hello.md
$ git add test.txt
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: hello.md
new file: test.txt
然后執(zhí)行 git commit
把緩存區(qū)的修改提交的版本庫。
$ git commit -m 'add test.txt'
2 files changed, 2 insertions(+)
create mode 100644 test.txt
$ git status
On branch master
nothing to commit, working directory clean
提交完之后辐赞,工作區(qū)是干凈的部翘,緩存區(qū)也是干凈的。
這個緩存區(qū)的概念非常重要响委,一定要理解新思。
文件狀態(tài)與工作區(qū)域?qū)?yīng)關(guān)系
剛開始時工作區(qū)域是空的,沒有任何文件赘风,然后我們初始化版本庫夹囚。
新創(chuàng)建的文件都是"未跟蹤"狀態(tài),放在工作區(qū)邀窃;
執(zhí)行完 ·git add
之后的文件都是“已緩存”狀態(tài)荸哟,放在緩存區(qū);
執(zhí)行完git commit
之后的文件都是“已提交”狀態(tài)蛔翅,放在版本庫中敲茄;
緩存區(qū)的文件被修改了,文件是處于“已修改”狀態(tài)山析,放在緩存區(qū)中堰燎;
版本庫中的文件被修改,跟創(chuàng)建新文件類似笋轨,只不過該文件不是“未跟蹤”狀態(tài)秆剪,而是“已修改”狀態(tài)【粽可以重新走git add & git commit
流程仅讽。