有兩種取得 Git 項目倉庫的方法
-
第一種是在現(xiàn)有項目或目錄下導入所有文件到 Git 中爵川; 第二種是從一個服務器克隆一個現(xiàn)有的 Git 倉庫。
$ git init
$ git clone
文件4種狀態(tài)
-
Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過
git add
狀態(tài)變?yōu)?code>Staged. -
Unmodify: 文件已經(jīng)入庫, 未修改, 即版本庫中的文件快照內(nèi)容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變?yōu)?code>Modified. 如果使用
git rm
移出版本庫, 則成為Untracked
文件 -
Modified: 文件已修改, 僅僅是修改, 并沒有進行其他的操作. 這個文件也有兩個去處, 通過
git add
可進入暫存staged
狀態(tài), 使用git checkout
則丟棄修改過, 返回到unmodify
狀態(tài), 這個git checkout
即從庫中取出文件, 覆蓋當前修改 -
Staged: 暫存狀態(tài). 執(zhí)行
git commit
則將修改同步到庫中, 這時庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify
狀態(tài). 執(zhí)行git reset HEAD filename
取消暫存, 文件狀態(tài)為Modified
查看文件狀態(tài)
查看指定文件狀態(tài)
git status [filename]
查看所有文件狀態(tài)
git status
添加文件與目錄
工作區(qū)(Working Directory)就是你在電腦里能看到的目錄息楔。
版本庫(Repository)工作區(qū)有一個隱藏目錄
.git
寝贡,這個不算工作區(qū),而是Git的版本庫值依。Git的版本庫里存了很多東西圃泡,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支
master
愿险,以及指向master
的一個指針叫HEAD
颇蜡。將untracked狀態(tài)的文件添加到暫存區(qū),語法格式如下:
添加指定文件到暫存區(qū)
$ git add [file1] [file2] ...
添加指定目錄到暫存區(qū)辆亏,包括子目錄
$ git add [dir]
添加當前目錄的所有文件到暫存區(qū)
$ git add .
移除文件與目錄(撤銷add)
當執(zhí)行如下命令時风秤,會直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變
直接從暫存區(qū)刪除文件扮叨,工作區(qū)則不做出改變
git rm --cached <file>
通過重寫目錄樹移除add文件:
如果已經(jīng)用add 命令把文件加入stage了缤弦,就先需要從stage中撤銷
git reset HEAD <file>...
當執(zhí)行 “git reset HEAD” 命令時,暫存區(qū)的目錄樹會被重寫甫匹,被 master 分支指向的目錄樹所替換甸鸟,但是工作區(qū)不受影響。
移除所有未跟蹤文件
一般會加上參數(shù)-df兵迅,-d表示包含目錄,-f表示強制清除薪贫。
git clean [options]
總結(jié):
當執(zhí)行提交操作(git commit)時恍箭,暫存區(qū)的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新瞧省。即 master 指向的目錄樹就是提交時暫存區(qū)的目錄樹扯夭。
當執(zhí)行 “git reset HEAD” 命令時鳍贾,暫存區(qū)的目錄樹會被重寫,被 master 分支指向的目錄樹所替換交洗,但是工作區(qū)不受影響。
當執(zhí)行 “git rm –cached <file>” 命令時,會直接從暫存區(qū)刪除文件东帅,工作區(qū)則不做出改變霞赫。
當執(zhí)行 “git checkout .” 或者 “git checkout — <file>” 命令時,會用暫存區(qū)全部或指定的文件替換工作區(qū)的文件置森。這個操作很危險斗埂,會清除工作區(qū)中未添加到暫存區(qū)的改動。
當執(zhí)行 “git checkout HEAD .” 或者 “git checkout HEAD <file>” 命令時凫海,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件呛凶。這個命令也是極具危險性的,因為不但會清除工作區(qū)中未提交的改動行贪,也會清除暫存區(qū)中未提交的改