首先來(lái)過(guò)一下
git pull
與git push
的用法廊勃,了解過(guò)后滑进,最后還是推薦每次pull、push時(shí)都把內(nèi)容寫(xiě)全钞它,省去不必要的麻煩拜银。
git pull
1. 基本用法
- git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
-
git pull origin master:wt
,就是將遠(yuǎn)程主機(jī)origin上的master分支拉取過(guò)來(lái)须揣,并與本地的wt分支合并盐股; - 如果后面的冒號(hào)省略的話(huà),即
git pull origin master
耻卡,表示將遠(yuǎn)程主機(jī)origin上的master分支拉取過(guò)來(lái)疯汁,并與本地的當(dāng)前所在分支合并;
git push
1.基本用法
- git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
-
git push origin wt
卵酪,如果遠(yuǎn)程分支被省略幌蚊,則表示將本地分支推送到與之存在映射關(guān)系的遠(yuǎn)程分支谤碳,如果不存在映射關(guān)系的遠(yuǎn)程分支,則會(huì)被新建一個(gè)與本地分支同名的遠(yuǎn)程分支溢豆;(所以當(dāng)你想要推送的遠(yuǎn)程分支feature與本地分支wt不同名且不存在映射關(guān)系蜒简,請(qǐng)一定寫(xiě)全!d鱿伞4瓴纭!6铀) -
git push origin :feature
卷仑,如果冒號(hào)前的本地分支省略,則表示刪除指定的遠(yuǎn)程分支麸折,因?yàn)檫@等同于推送一個(gè)空的本地分支到遠(yuǎn)程分支锡凝,等同于git push origin --delete feature
,所以這種形式慎用9柑洹4芫狻!芭析! -
git push origin
锚扎,如果當(dāng)前本地分支與遠(yuǎn)程分支存在映射關(guān)系,則本地分支與遠(yuǎn)程分支都可以省略放刨,即將當(dāng)前分支推送到origin主機(jī)的對(duì)應(yīng)分支工秩;(記住~~僅限于存在映射關(guān)系,你才可以省略=场V摇!C椤) -
git push
眉菱,當(dāng)前本地分支只有一個(gè)遠(yuǎn)程分支(也就是說(shuō)只有一個(gè)遠(yuǎn)程主機(jī)),那么它連主機(jī)名都可以省略掉分;
下面結(jié)合情形來(lái)記錄分支
- 你clone了一個(gè)新代碼俭缓,記住git clone的時(shí)候只會(huì)把遠(yuǎn)程上的master分支clone下來(lái),無(wú)法clone所有分支酥郭;
- 但遠(yuǎn)程上一共有master华坦、dev、test三個(gè)分支不从,一般你需要把寫(xiě)的代碼提到dev分支上惜姐,這時(shí)你
git checkout dev
,git會(huì)自動(dòng)地生成一個(gè)本地的分支指針,相當(dāng)于執(zhí)行git checkout -b dev origin/dev
(貌似這里僅適用于本地分支與遠(yuǎn)程分支同名的情況下歹袁,意思為切換到遠(yuǎn)端的dev分支坷衍,并在本地新建dev分支,且切換到本地dev分支); - 此時(shí)条舔,如果你不想本地與遠(yuǎn)程同名枫耳,那么你可以直接在本地新建分支
git checkout -b wt
,此時(shí)wt分支的代碼就與dev分支上的保持一致(你在哪個(gè)分支下新建分支孟抗,新建分支的代碼就與那個(gè)分支下的代碼保持一致)迁杨; -
直接新建的本地的分支(
git checkout -b XX
這種只新建了本地分支)是不會(huì)自動(dòng)和遠(yuǎn)程同步的(即映射);查看是否當(dāng)前分支是否有映射分支夸浅,執(zhí)行git branch -vv
仑最,括號(hào)中的藍(lán)色字體就是映射得遠(yuǎn)程分支,如果沒(méi)有帆喇,那就是沒(méi)有映射的遠(yuǎn)程分支; - 如果本地分支沒(méi)有與遠(yuǎn)程分支映射亿胸,那么你在git pull或push的時(shí)候坯钦,要把所有內(nèi)容都寫(xiě)全,即
git pull <遠(yuǎn)端主機(jī)名> <遠(yuǎn)端分支>:<本地分支>
(git pull origin feature:wt
)和git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
(git push origin wt:feature
)侈玄; - 如果你想把本地分支與遠(yuǎn)程分支映射起來(lái)婉刀,先切換到要映射的本地分支上,執(zhí)行
git branch --set-upstream-to <遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支>
(git branch --set-upstream-to origin/dev
)序仙,關(guān)聯(lián)之后呢突颊,可以運(yùn)行git branch -vv
查看映射關(guān)系,成功后每次只需寫(xiě)git pull
潘悼、git push
即可律秃,就不需要加其他內(nèi)容了; - 下面說(shuō)一下合并代碼的步驟(請(qǐng)一直保持本地分支與你要合并到的分支上版本一致)
// 此時(shí)在本地分支wt上治唤,相關(guān)功能都寫(xiě)在此分支上棒动,寫(xiě)完提交到本地倉(cāng)庫(kù)
git add .
git commit -m "message"
// 把本地分支wt上的內(nèi)容合并到遠(yuǎn)程分支dev
git checkout dev
git pull // 更新一下dev最新的代碼
git merge wt //把wt分支上的內(nèi)容合并到當(dāng)前分支dev
git push
//這時(shí)你又要切到wt分支上繼續(xù)寫(xiě)
git checkout wt //這時(shí)你可以git merge dev一下,使本地wt分支與dev分支代碼一致宾添,也可以不merge船惨,wt本地分支只保留我自己的改動(dòng)
- 最后wt分支上的代碼合到遠(yuǎn)程dev上后,可以把本地分支wt刪掉缕陕,
git branch -d wt
(因?yàn)閣t這個(gè)分支只在本地啊粱锐,沒(méi)有推到遠(yuǎn)程倉(cāng)庫(kù),所以可以刪除扛邑,當(dāng)然在此分支上的改動(dòng)都提交后刪除怜浅,你也可以不提改動(dòng),直接強(qiáng)制刪除鹿榜,git branch -D wt
)
解決沖突
- 當(dāng)你準(zhǔn)備把你本地的分支合并出現(xiàn)沖突時(shí)海雪,你要分清什么是“當(dāng)前更改”和“傳入的更改”锦爵;
- “本地更改”(
<<<<<<<
)就是你git pull從遠(yuǎn)端拉下來(lái)的代碼; - “傳入的更改”(
>>>>>>>
)就是你git commit要上傳的代碼奥裸;
沖突.png
關(guān)于分支的git命令
-
git branch
查看本地分支险掀; -
git branch -r
查看遠(yuǎn)端分支; -
git branch -a
查看所有的分支湾宙,包括本地和遠(yuǎn)端的樟氢; -
git branch -vv
查看本地分支的映射信息; -
git branch --unset-upstream
撤銷(xiāo)本地分支與遠(yuǎn)程分支的映射關(guān)系侠鳄; -
git checkout -b XX origin/dev
切換到遠(yuǎn)程分支dev埠啃,并新建本地分支XX且切換至XX分支上(這樣子新建的分支會(huì)與遠(yuǎn)程分支有映射關(guān)系);
image.png -
git branch -d XX
刪除XX本地分支伟恶; - 如果遠(yuǎn)端有
dev
這個(gè)分支碴开,在本地直接git checkout dev
(分支名字一樣),這時(shí)會(huì)自動(dòng)在本地創(chuàng)建dev
這個(gè)分支且與遠(yuǎn)端dev
相關(guān)聯(lián)(與第7條有點(diǎn)像啊博秫,只是名字是否相同的區(qū)別)潦牛;