更新時間:2022年09月08日13時41分 來源:傳智教育 瀏覽次數(shù):
將尚未進行版本控制的本地目錄轉(zhuǎn)換為Git倉庫,從其它服務(wù)器克隆一個已存在的Git倉庫,這兩種方式都能夠在自己的電腦上得到一個可用的Git倉庫。
如果自己有一個尚未進行版本控制的項目目錄,想要用 Git 來控制它,需要執(zhí)行如下兩個步驟:
① 在項目目錄中,通過鼠標右鍵打開“Git Bash”
② 執(zhí)行 git init 命令將當前的目錄轉(zhuǎn)化為 Git 倉庫
git init 命令會創(chuàng)建一個名為 .git 的隱藏目錄,這個 .git 目錄就是當前項目的 Git 倉庫,里面包含了初始的必要文件,這些文件是 Git 倉庫的必要組成部分。
工作區(qū)中的每一個文件可能有 4 種狀態(tài),這四種狀態(tài)共分為兩大類,如圖所示:
Git 操作的終極結(jié)果:讓工作區(qū)中的文件都處于“未修改”的狀態(tài)。
可以使用 git status 命令查看文件處于什么狀態(tài),例如:
在狀態(tài)報告中可以看到新建的 index.html 文件出現(xiàn)在 Untracked files(未跟蹤的文件) 下面。未跟蹤的文件意味著 Git 在之前的快照(提交)中沒有這些文件;Git 不會自動將之納入跟蹤范圍,除非明確地告訴它“我需要使用 Git 跟蹤管理該文件”。
使用 git status 輸出的狀態(tài)報告很詳細,但有些繁瑣。如果希望以精簡的方式顯示文件的狀態(tài),可以使用如下兩條完全等價的命令,其中 -s 是 --short 的簡寫形式:
#以精簡的方式顯示文件狀態(tài) git status -s git status --short
未跟蹤文件前面有紅色的 ?? 標記,例如
使用命令 git add 開始跟蹤一個文件。 所以,要跟蹤 index.html 文件,運行如下的命令即可:
git add index.html
此時再運行 git status 命令,會看到 index.html 文件在 Changes to be committed 這行的下面,說明已被跟蹤,并處于暫存狀態(tài):
也可以以精簡的方式顯示文件的狀態(tài)新添加到暫存區(qū)中的文件前面有綠色的 A 標記
現(xiàn)在暫存區(qū)中有一個 index.html 文件等待被提交到 Git 倉庫中進行保存??梢詧?zhí)行 git commit 命令進行提交,其中 -m 選項后面是本次的提交消息,用來對提交的內(nèi)容做進一步的描述:
git commit-m"新建了index.html文件"
提交成功之后,會顯示如下的信息:
提交成功之后,再次檢查文件的狀態(tài),得到提示如下:
證明工作區(qū)中所有的文件都處于“未修改”的狀態(tài),沒有任何文件需要被提交。
8. 對已提交的文件進行修改
目前,index.html 文件已經(jīng)被 Git 跟蹤,并且工作區(qū)和 Git 倉庫中的 index.html 文件內(nèi)容保持一致。當我們 修改了工作區(qū)中 index.html 的內(nèi)容之后,再次運行 git status 和 git status -s 命令,會看到如下的內(nèi)容:
文件 index.html 出現(xiàn)在 Changes not staged for commit 這行下面,說明已跟蹤文件的內(nèi)容發(fā)生了變化,但還沒有放到暫存區(qū)。
注意:修改過的、沒有放入暫存區(qū)的文件前面有紅色的 M 標記。
目前,工作區(qū)中的 index.html 文件已被修改,如果要暫存這次修改,需要再次運行 git add 命令,這個命令 是個多功能的命令,主要有如下 3 個功效:
① 可以用它開始跟蹤新文件
② 把已跟蹤的、且已修改的文件放到暫存區(qū)
③ 把有沖突的文件標記為已解決狀態(tài)
再次運行 git commit -m "提交消息" 命令,即可將暫存區(qū)中記錄的 index.html 的快照,提交到 Git 倉庫中進行保存:
撤銷對文件的修改指的是:把對工作區(qū)中對應(yīng)文件的修改,還原成 Git 倉庫中所保存的版本。操作的結(jié)果:所有的修改會丟失,且無法恢復(fù)!危險性比較高,請慎重操作!
撤銷操作的本質(zhì):用 Git 倉庫中保存的文件,覆蓋工作區(qū)中指定的文件。
如果需要被暫存的文件個數(shù)比較多,可以使用如下的命令,一次性將所有的新增和修改過的文件加入暫存區(qū):
git add
今后在項目開發(fā)中,會經(jīng)常使用這個命令,將新增和修改過后的文件加入暫存區(qū)。
如果需要從暫存區(qū)中移除對應(yīng)的文件,可以使用如下的命令:
git reset HEAD 要移除的文件名稱
Git 標準的工作流程是工作區(qū) → 暫存區(qū) → Git 倉庫,但有時候這么做略顯繁瑣,此時可以跳過暫存區(qū),直接將工作區(qū)中的修改提交到 Git 倉庫,這時候 Git 工作的流程簡化為了工作區(qū) → Git 倉庫。
Git 提供了一個跳過使用暫存區(qū)域的方式, 只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把所有已經(jīng)跟蹤過的文件暫存起來一并提交,從而跳過 git add 步驟:
git commit -a -m“描述消息"
從Git 倉庫中移除文件的方式有兩種,從 Git 倉庫和工作區(qū)中同時移除對應(yīng)的文件和只從Git倉庫中移除指定的文件,但保留工作區(qū)中對應(yīng)的文件。
#從 Git倉庫和工作區(qū)中同時移除index.js 文件 git rm -f index.js #A從Git倉庫中移除 index.css,但保留工作區(qū)中的index.css文件 git rm --cached index.css
一般我們總會有些文件無需納入 Git 的管理,也不希望它們總出現(xiàn)在未跟蹤文件列表。 在這種情況下,我們可
以創(chuàng)建一個名為 .gitignore 的配置文件,列出要忽略的文件的匹配模式。文件 .gitignore 的格式規(guī)范如下:
① 以 # 開頭的是注釋
② 以 / 結(jié)尾的是目錄
③ 以 / 開頭防止遞歸
④ 以 / 開頭表示取反
⑤ 可以使用 glob 模式進行文件和文件夾的匹配(glob 指簡化了的正則表達式)。
所謂的 glob 模式是指簡化了的正則表達式:
① 星號 * 匹配零個或多個任意字符。
② [abc] 匹配任何一個列在方括號中的字符 (此案例匹配一個 a 或匹配一個 b 或匹配一個 c)。
③ 問號 ? 只匹配一個任意字符。
④ 在方括號中使用短劃線分隔兩個字符, 表示所有在這兩個字符范圍內(nèi)的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數(shù)字)。
⑤ 兩個星號 ** 表示匹配任意中間目錄(比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等)。
18. .gitignore 文件的例子
#忽略所有的.a文件 *.a #但跟蹤所有的1ib.a,即便你在前面忽略了.a文件 !lib.a 二只忽略當前目錄下的 TODO文件,而不忽略 subdir/TODO /TOD0 #忽略任何目錄下名為build的文件夾 build/ #忽略doc/notes.txt,但不忽略doc/server/arch.txt doc/*.txt # 忽略doc/ 目錄及其所有子目錄下的.pdf文件 doc/**/*.pdf
如果希望回顧項目的提交歷史,可以使用 git log 這個簡單且有效的命令。
#按時間先后順序列出所有的提交歷史,最近的提交排在最上面 git log #只展示最新的兩條提交歷史,數(shù)字可以按需進行填寫 git log -2 # 在一行上展示最近兩條提交歷史的信息 git log -2 --pretty=oneline # 在一行上展示最近兩條提交歷史的信息,并自定義輸出的格式 # %h 提交的簡寫哈希值 %an作者名字 %ar作者修訂日期,按多久以前的方式顯示 %s提交說明 git log -2 --pretty=format:"%h | %an | %ar | %s"
#在一行上展示所有的提交歷史 git log --pretty=oneline #使用 git reset--hard命令,根據(jù)指定的提交ID 回退到指定版本 git reset --hard <CommitID> #在舊版本中使用git reflog--pretty=oneline 命令,查看命令操作的歷史 git reflog --pretty=oneline #再次根據(jù)最新的提交ID,跳轉(zhuǎn)到最新的版本 git reset --hard <CommitID>