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