[華為云在線課程][Git基礎(chǔ)與實(shí)操][第1章][Git基礎(chǔ)理論篇][Git基本命令]
1,Git版本控制下的三種工程區(qū)域 & 文件狀態(tài)
在學(xué)習(xí)Git常用命令之前,必須再次強(qiáng)化下面幾個(gè)概念。
Git版本控制下的工程區(qū)域只有三種:
1,版本庫(kù)(Repository)
在工作區(qū)中有一個(gè)隱藏目錄.git,這個(gè)文件夾就是Git的版本庫(kù),里面存放了Git用來(lái)管理該工程的所有版本數(shù)據(jù),也可以叫本地倉(cāng)庫(kù)。
2,工作區(qū)(Working Directory)
日常工作的代碼文件或者文檔所在的文件夾。
3,暫存區(qū)(Stage)
一般存放在工程根目錄.git/index文件中,所以我們也可以把暫存區(qū)叫做索引(index)。
Git版本控制下的文件狀態(tài)只有三種:
1,已提交(committed)
該文件已經(jīng)被安全地保存在本地?cái)?shù)據(jù)庫(kù)中了。
2,已修改(modified)
修改了某個(gè)文件,但還沒(méi)有提交保存。
3,已暫存(staged)
把已修改的文件放在下次提交時(shí)要保存的清單中。
2,Git常用命令
工程準(zhǔn)備
工程克隆-git clone
查看工作區(qū)
查看工作區(qū)的修改內(nèi)容-git diff
查看工作區(qū)文件狀態(tài)-git status
文件修改后提交推送
新增/刪除/移動(dòng)文件到暫存區(qū)-git add / git rm / git mv
提交更改的文件-git commit
推送遠(yuǎn)端倉(cāng)庫(kù)-git push
查看日志
查看當(dāng)前分支上的提交日志-git log
分支管理
列出本地分支-git branch
新建分支-git branch / git checkout -b
刪除分支-git branch -d
切換分支-git checkout
更新分支-git pull
合并分支-git merge
撤銷(xiāo)操作
強(qiáng)制回退到歷史節(jié)點(diǎn)-git reset
回退本地所有修改而未提交的-git checkout
分支合并
合并目標(biāo)分支內(nèi)容到當(dāng)前分支-git merge / git rebase
3,Git常用命令實(shí)操
3.1,工程準(zhǔn)備 git init / git clone
git init 用于在本地目錄下新建git項(xiàng)目倉(cāng)庫(kù)
執(zhí)行g(shù)it init后,當(dāng)前目錄下自動(dòng)生成一個(gè)名為.git的目錄,這代表當(dāng)前項(xiàng)目所在目錄已納入Git管理。.git目錄下存放著本項(xiàng)目的Git版本庫(kù),在此不建議初學(xué)者改動(dòng).git目錄下的文件內(nèi)容。.git文件夾默認(rèn)是隱藏的。
git clone 用于克隆遠(yuǎn)端工程到本地磁盤(pán)
如果想從遠(yuǎn)端服務(wù)器獲取某個(gè)工程,那么:
確定自己Git賬號(hào)擁有訪問(wèn)、下載該工程的權(quán)限
獲取該工程的Git倉(cāng)庫(kù)URL
本地命令行執(zhí)行g(shù)it clone [URL]或git lfs clone [URL]
注意,如果你所在的項(xiàng)目git服務(wù)器已支持git-lfs,對(duì)二進(jìn)制文件進(jìn)行了區(qū)別管理,那么克隆工程的時(shí)候務(wù)必使用git lfs clone。否則克隆操作無(wú)法下載到工程中的二進(jìn)制文件,工程內(nèi)容不完整。
3.2,新增/刪除/移動(dòng)文件到暫存區(qū) git add / git rm / git mv
在提交你修改的文件之前,需要git add把文件添加到暫存區(qū)
如果該文件是新創(chuàng)建,尚未被git跟蹤的,需要先執(zhí)行g(shù)it add將該文件添加到暫存區(qū),再執(zhí)行提交。
如果文件已經(jīng)被git跟蹤,即曾經(jīng)提交過(guò)的。在早期版本的git中,需要git add再提交;在較新版本的git中,不需要git add即可提交。
git rm 將指定文件徹底從當(dāng)前分支的緩存區(qū)刪除,因此它從當(dāng)前分支的下一個(gè)提交快照中被刪除。
如果一個(gè)文件被git rm后進(jìn)行了提交,那么它將脫離git跟蹤,這個(gè)文件在之后的節(jié)點(diǎn)中不再受git工程的管理。
執(zhí)行g(shù)it rm后,該文件會(huì)在緩存區(qū)消失。
你可以直接從硬盤(pán)刪除文件,然后對(duì)該文件執(zhí)行g(shù)it commit,git會(huì)自動(dòng)將刪除的文件從索引中移除,效果一樣。
git mv用于移動(dòng)文件,也可以用于重命名文件
例1:需要將文件codehunter_nginx.conf從當(dāng)前目錄移動(dòng)到config目錄下,可執(zhí)行:
git mv codehunter_nginx.conf config
例2:需要將文件codehunter_nginx.conf重命名為new_nginx.conf,可執(zhí)行:
git mv config/codehunter_nginx.conf config/new_nginx.conf
3.3,查看工作區(qū) git diff / git status
git diff
用于比較項(xiàng)目中任意兩個(gè)版本(分支)的差異,可以用來(lái)比較當(dāng)前的索引和上次提交之間的差異。
比較兩個(gè)節(jié)點(diǎn)之間的差異:diff --git a/README.md b/README.md
在diff后面加–name-status參數(shù),只看文件列表:git diff master …/file --name-status
git status
用于顯示工作目錄和暫存區(qū)的狀態(tài)。
使用此命令能看到修改的git文件是否已被暫存,新增的文件是否納入了git版本庫(kù)的管理。
3.4,提交更改的文件 git commit
主要是將暫存區(qū)里的文件改動(dòng)提交到本地的版本庫(kù)。
再次強(qiáng)調(diào),提交這個(gè)動(dòng)作是本地動(dòng)作,是往本地的版本庫(kù)中記錄改動(dòng),不影響遠(yuǎn)端服務(wù)器。git commit一般需要附帶提交描述信息,所以常見(jiàn)用法是:git commit file_name -m “commit message”。
提交成功后,git日志可查到此次提交的id和提交描述信息。
如果要一次性提交所有在暫存區(qū)改動(dòng)的文件到版本庫(kù),可以執(zhí)行:git commit -am “commit message”。
3.5,查看日志 git log
常用的日志命令格式:git log。
git log配合不同參數(shù)具有相當(dāng)靈活強(qiáng)大的展示功能,常見(jiàn)的如 --name-status/-p/–pretty/–graph等等。
3.6,推送遠(yuǎn)端倉(cāng)庫(kù) git push
在使用git commit命令將自己的修改從暫存區(qū)提交到本地版本庫(kù)后,可以使用git push將本地版本庫(kù)的分支推送到遠(yuǎn)程服務(wù)器上對(duì)應(yīng)的分支。
成功推送遠(yuǎn)端倉(cāng)庫(kù)后,其他開(kāi)發(fā)人員可以獲取到你新提交的內(nèi)容。
常用的推送命令格式:git push origin branch_name。
branch_name決定了你的本地分支推送成功后,在遠(yuǎn)端服務(wù)器上的分支名,其他人據(jù)此可以獲取該分支上的改動(dòng)內(nèi)容。
你的本地分支名可以與推送到遠(yuǎn)端的分支名不同:git push origin branch_name:new_branch_name
Windows下大小寫(xiě)不敏感,要避免使用使用大小寫(xiě)區(qū)分文件。
3.7,分支管理 git branch / git checkout / git branch -d / git pull / git fetch
git branch命令即可查看本地工程的所有g(shù)it分支名稱(chēng)
輸入命令git branch命令后git返回了當(dāng)前本地工程所有的分支名稱(chēng),其中master分支前面的"*"表示-當(dāng)前工作區(qū)所在的分支是master。
如果想查看遠(yuǎn)端服務(wù)器上擁有哪些分支,那么執(zhí)行g(shù)it branch -r即可,返回的分支名帶origin前綴,表示在遠(yuǎn)端;
如果想查看遠(yuǎn)端服務(wù)器和本地工程所有的分支,那么執(zhí)行g(shù)it branch -a即可。
git branch和git checkout - 的異同
相同點(diǎn):
git branch和git checkout -b都可以用于新建分支(默認(rèn)基于當(dāng)前分支節(jié)點(diǎn)創(chuàng)建)。
區(qū)別點(diǎn):
git branch新建分支后并不會(huì)切換到新分支;
git checkout -b新建分支后自動(dòng)切換到新分支
常用的新建分支命令格式:git branch new_branch_name / git checkout -b branch_name
git branch -d和git branch -D都可以用來(lái)刪除本地分支,后者大寫(xiě)表示強(qiáng)制刪除。
有時(shí)候當(dāng)事分支上包含了未合并的改動(dòng),或者當(dāng)事分支是當(dāng)前所在分支,則-d無(wú)法刪除,需要使用強(qiáng)制刪除來(lái)達(dá)到目的。
常用的刪除分支命令格式:git branch -d branch_name / git branch -D branch_name
刪除服務(wù)器上的遠(yuǎn)程分支可以使用git branch -d -r branch_name,其中branch_name為本地分支名。
刪除后,還要推送到服務(wù)器上才行,即git push origin : branch_name。
git checkout命令除了創(chuàng)建分支,還用來(lái)切換分支,當(dāng)然比較官方的叫法是"檢出"
有時(shí)候,當(dāng)前分支工作區(qū)存在修改而未提交的文件,與目的分支上的內(nèi)容沖突,會(huì)導(dǎo)致checkout切換失敗,這時(shí)候,可以使用git checkout -f進(jìn)行強(qiáng)制切換。
常用的切換分支命令格式:git checkout branch_name。
git checkout對(duì)象可以是分支,也可以是某個(gè)提交節(jié)點(diǎn)或者節(jié)點(diǎn)下的某個(gè)文件。
git pull
作用是從遠(yuǎn)端服務(wù)器中獲取某個(gè)分支的更新,再與本地指定的分支進(jìn)行自動(dòng)合并。
常用的切換分支命令格式:git pull origin remote_branch:local_branch
如果遠(yuǎn)程指定的分支與本地指定的分支相同,則可直接執(zhí)行g(shù)it pull origin remote_branch。
git fetch
作用是從遠(yuǎn)端服務(wù)器獲取某個(gè)分支的更新到本地倉(cāng)庫(kù)。
注意,與git pull不同,git fetch在獲取到更新后,并不會(huì)進(jìn)行合并(即git merge)操作,這樣能留給用戶一個(gè)操作空間,確認(rèn)git fetch內(nèi)容符合預(yù)期后,再?zèng)Q定是否手動(dòng)合并節(jié)點(diǎn)。
常用的獲取遠(yuǎn)端分支更新命令格式:git fetch origin remote_branch:local_branch
如果遠(yuǎn)程指定的分支與本地指定的分支相同,則可直接執(zhí)行g(shù)it fetch origin remote_branch
3.8,分支合并 git merge / git rebase
git merge
用于從指定的分支(節(jié)點(diǎn))合并到當(dāng)前分支的操作。
git會(huì)將指定的分支與當(dāng)前分支進(jìn)行比較,找出二者最近的一個(gè)共同節(jié)點(diǎn)base,之后將指定分支在base之后分離的節(jié)點(diǎn)合并到當(dāng)前分支上。分支合并,實(shí)際上是分支間差異提交節(jié)點(diǎn)的合并。
常用的切換分支命令格式:git merge branch_name。
git rebase
用于合并目標(biāo)分支內(nèi)容到目前分支。
這條命令用于分支合并,git merge也是用于分支合并。如果你要將其他分支的提交節(jié)點(diǎn)合并到當(dāng)前分支,那么git rebase和git merge都可以。
常用的合并命令格式:git rebase branch_name,git rebase,git merge背后的實(shí)現(xiàn)機(jī)制和對(duì)合并后節(jié)點(diǎn)造成的影響有很大的差異,有各自的風(fēng)險(xiǎn)存在。
3.9,強(qiáng)制回退到歷史節(jié)點(diǎn) git reset / git checkout
git reset
git reset 通常用于撤銷(xiāo)當(dāng)前工作區(qū)中的某些git add/commit操作,可將工作區(qū)內(nèi)容回退到歷史提交節(jié)點(diǎn)。
常用的工作區(qū)回退命令格式:git reset commit_id。
git checkout
用于回退本地所有修改而未提交的文件內(nèi)容。
這是條有風(fēng)險(xiǎn)的命令,因?yàn)樗鼤?huì)取消本地工作區(qū)的修改(相對(duì)于暫存區(qū)),用暫存區(qū)的所有文件直接覆蓋本地文件,達(dá)到回退內(nèi)容的目的。但它不給用戶任何確認(rèn)機(jī)會(huì),所以謹(jǐn)慎使用。
常用的回退命令格式:git checkout。
如果僅僅想回退某個(gè)文件的未提交改動(dòng),可以用git checkout -filename來(lái)達(dá)到目的;如果想將工具區(qū)回退(檢出)到某個(gè)提交版本,可以使用git checkout commit_id。
Git
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。