遠(yuǎn)程倉(cāng)庫(kù)
1.克隆遠(yuǎn)程倉(cāng)庫(kù)
git clone <url> [dir]
#將存儲(chǔ)庫(kù)克隆到新創(chuàng)建的目錄中乌昔,默認(rèn)與遠(yuǎn)程主機(jī)的版本庫(kù)同名爬迟,可以指定目錄名稱(chēng)dir
執(zhí)行此命令會(huì)為克隆的存儲(chǔ)庫(kù)中的每個(gè)分支創(chuàng)建遠(yuǎn)程跟蹤分支(使用git branch -r
可見(jiàn)),并且本地創(chuàng)建一個(gè)master分支,與本地的遠(yuǎn)程跟蹤分支master進(jìn)行關(guān)聯(lián)电湘。
2.添加遠(yuǎn)程倉(cāng)庫(kù)
git remote add <remoteName> <url>
#remoteName為遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng)每庆,url為遠(yuǎn)程倉(cāng)庫(kù)鏈接
實(shí)際上是與遠(yuǎn)程倉(cāng)庫(kù)建立聯(lián)系筐带,這樣在推送和拉取代碼時(shí)就知道往哪里推送和拉取了。
示例:在github上新建一個(gè)倉(cāng)庫(kù)缤灵,然后在本地一個(gè)空的git倉(cāng)庫(kù)里添加遠(yuǎn)程倉(cāng)庫(kù)
3.查看遠(yuǎn)程倉(cāng)庫(kù)
git remote
#只查看遠(yuǎn)程倉(cāng)庫(kù)名
git remote -v
#查看遠(yuǎn)程倉(cāng)庫(kù)名及url信息
4.修改|查看遠(yuǎn)程倉(cāng)庫(kù)鏈接
git remote set-url <remoteName> <url>
#設(shè)置指定遠(yuǎn)程倉(cāng)庫(kù)的鏈接
git remote get-url <remoteName>
#獲取指定遠(yuǎn)程倉(cāng)庫(kù)的鏈接
5.修改本地遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng)
git remote rename <old> <new>
6.刪除本地的遠(yuǎn)程倉(cāng)庫(kù)
git remote remove <remoteName>
遠(yuǎn)程分支
1.遠(yuǎn)程分支查看
git branch -a
#查看本地及遠(yuǎn)程分支
git branch -r
#只查看遠(yuǎn)程分支
git branch -l
#只查看本地分支
2.1從遠(yuǎn)程分支拉取內(nèi)容
git fetch <remote_name> <branch_name>
#從遠(yuǎn)程倉(cāng)庫(kù)的指定同名分支上拉取最新的內(nèi)容
git fetch
#如果省略參數(shù)烫堤,會(huì)從遠(yuǎn)程倉(cāng)庫(kù)的所有分支上拉取最新的內(nèi)容
這將更新git remote中所有的遠(yuǎn)程倉(cāng)庫(kù)所包含分支的最新commitId, 將其記錄到.git/FETCH_HEAD
文件中
FETCH_HEAD
:該文件在git目錄下,指向目前已經(jīng)從遠(yuǎn)程倉(cāng)庫(kù)取下來(lái)的分支的末端版本
git fetch
更新遠(yuǎn)程倉(cāng)庫(kù)的方式如下:
# 方法一
git fetch origin master #從遠(yuǎn)程的origin倉(cāng)庫(kù)的master分支下載代碼到本地的origin master
git log -p master.. origin/master #比較本地的倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的區(qū)別
git merge origin/master #把遠(yuǎn)程下載下來(lái)的代碼合并到本地倉(cāng)庫(kù)
# 方法二
git fetch origin master:temp #本地新建一個(gè)分支temp凤价,并將遠(yuǎn)程origin倉(cāng)庫(kù)的master分支下載到本地temp分支
git diff temp #比較master分支和temp分支的不同
git merge temp #合并temp分支到master分支
git branch -d temp #刪除temp
2.2從遠(yuǎn)程分支拉取內(nèi)容
git pull <remote_name> <branch_name>
#從遠(yuǎn)程倉(cāng)庫(kù)的指定同名分支上拉取最新的內(nèi)容鸽斟,會(huì)自動(dòng)進(jìn)行分支的合并
該命令等同于 git fetch + git merge
git pull
#如果省略參數(shù),會(huì)自動(dòng)從當(dāng)前分支名稱(chēng)相同的遠(yuǎn)程分支上拉取內(nèi)容利诺。如果當(dāng)前分支沒(méi)有跟蹤到任何遠(yuǎn)程分支或者跟蹤的遠(yuǎn)程分支不同名富蓄,則拉取失敗
git pull origin master --allow-unrelated-histories
#合并兩個(gè)獨(dú)立的倉(cāng)庫(kù)(第一次合并倉(cāng)庫(kù)的時(shí)候必須使用該選項(xiàng)),否則兩個(gè)倉(cāng)庫(kù)如果都有內(nèi)容的話(huà)慢逾,第一次進(jìn)行合并會(huì)報(bào)錯(cuò):refusing to merge unrelated histories
3.推送本地分支至遠(yuǎn)程
git push <remote_name> <branch_name>
#將指定本地分支推送到遠(yuǎn)程倉(cāng)庫(kù)的同名分支上立倍,如果遠(yuǎn)程分支不存在則會(huì)自動(dòng)創(chuàng)建
git push
#如果省略參數(shù),會(huì)自動(dòng)將當(dāng)前分支推送到與其分支名稱(chēng)相同的遠(yuǎn)程分支上侣滩。如果當(dāng)前分支沒(méi)有跟蹤到任何遠(yuǎn)程分支或者跟蹤的遠(yuǎn)程分支不同名口注,則推送失敗
git push <remote_name> <branch_name>:<remote_branch>
#將本地分支推送到遠(yuǎn)程指定的分支上
例如:
git push origin dev
#推送本地dev分支到遠(yuǎn)程的dev分支
git push origin HEAD:master
#推送本地HEAD指向的分支(當(dāng)前工作分支)到遠(yuǎn)程的master分支
4.遠(yuǎn)程分支檢出
如果遠(yuǎn)程存在多個(gè)分支,使用 git clone 只會(huì)創(chuàng)建一個(gè)master分支 君珠,需要使用命令進(jìn)行遠(yuǎn)程分支檢出寝志。
git checkout -b <branch_name> <remote_name>/<remote_branch>
#本地新建分支并檢出遠(yuǎn)程分支代碼
git checkout <remote_branch>
#也可以使用該命令進(jìn)行檢出
對(duì)于該命令如果本地有該分支,執(zhí)行切換操作,如果本地沒(méi)有該分支材部,會(huì)查找remote上有無(wú)該分支毫缆,如果有,并將HEAD指向遠(yuǎn)程分支乐导,并建立追蹤關(guān)系苦丁,如果本地和遠(yuǎn)程都沒(méi)有,則報(bào)錯(cuò)物臂。
有時(shí)候旺拉,會(huì)發(fā)現(xiàn)明明遠(yuǎn)端有這個(gè)分支卻依然報(bào)錯(cuò),可以執(zhí)行git pull
棵磷,然后再checkout
4.遠(yuǎn)程分支合并
通常最終代碼發(fā)布是使用master分支蛾狗,所以發(fā)布前需要進(jìn)行遠(yuǎn)程分支合并操作,實(shí)際是在本地分支進(jìn)行合并后然后推送到遠(yuǎn)程master上泽本,如果本地沒(méi)有檢出遠(yuǎn)程分支則需要先進(jìn)行遠(yuǎn)程分支的檢出
1.git checkout master
#切換到master分支
2.git merge <branch_name>
#將分支合并到master分支
3.git push origin master
#將master分支推送至遠(yuǎn)程
注:origin為默認(rèn)遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng)
5.遠(yuǎn)程分支刪除
如果遠(yuǎn)程分支合并完成后不再需要了淘太,可以進(jìn)行刪除操作
git push origin --delete <branch_name>
#直接刪除遠(yuǎn)程分支
git push origin :<branch_name>
#推送一個(gè)空分支(也代表刪除)
遠(yuǎn)程分支跟蹤
1.分支跟蹤意義
從遠(yuǎn)程分支檢出的本地分支,稱(chēng)為跟蹤分支(tracking branch)
规丽。跟蹤分支是一種和遠(yuǎn)程分支有直接聯(lián)系的本地分支蒲牧。務(wù)必讓跟蹤分支和遠(yuǎn)程分支保持同名。
在跟蹤分支里輸入git push
赌莺,Git會(huì)自行推斷應(yīng)該向哪個(gè)服務(wù)器的哪個(gè)分支推送數(shù)據(jù)冰抢。反過(guò)來(lái),在這些分支里運(yùn)行git pull
會(huì)獲取所有遠(yuǎn)程索引艘狭,并把它們的數(shù)據(jù)都合并到本地分支中來(lái)挎扰。
2.查看跟蹤關(guān)系
git branch -vv
#查看本地分支與遠(yuǎn)程分支追蹤關(guān)系
3.自動(dòng)建立跟蹤關(guān)系
1.git clone
#建立本地master分支與遠(yuǎn)程master分支的跟蹤關(guān)系
2.git push -u origin <branch_name>
#使用-u參數(shù)會(huì)自動(dòng)建立本地指定分支與遠(yuǎn)程同名分支的追蹤關(guān)系
3.git checkout -b <branch_name> origin/<remote_branch>
#會(huì)將遠(yuǎn)程指定分支與本地指定分支建立跟蹤關(guān)系
4.手動(dòng)建立跟蹤關(guān)系
git branch --set-upstream-to origin/<branch> <branch_name>
#如果省略branch,則默認(rèn)與遠(yuǎn)程的master分支建立聯(lián)系
5.切斷跟蹤關(guān)系
如果本地分支關(guān)聯(lián)的遠(yuǎn)程分支不存在了巢音,本地分支想保留遵倦,需要切換與遠(yuǎn)程分支的聯(lián)系
git branch --unset-upstream <branch_name>
#此處的分支名稱(chēng)為本地分支,切斷本地分支的遠(yuǎn)程追蹤關(guān)系
6.錯(cuò)誤說(shuō)明
在使用git push
和git pull
時(shí)官撼,要特別注意當(dāng)前分支是否建立了跟蹤關(guān)系梧躺,跟蹤分支名稱(chēng)是否相同。
比如當(dāng)前在本地rxy分支傲绣,此時(shí)沒(méi)有跟蹤到任何遠(yuǎn)程分支掠哥,輸入git push
報(bào)錯(cuò),建議我們建立跟蹤關(guān)系
比如當(dāng)前在本地rxy分支秃诵,但是跟蹤的是master分支续搀,輸入git push
報(bào)錯(cuò),因?yàn)槊Q(chēng)不匹配菠净,建議我們指定參數(shù)推送