一: 分支策略
在實(shí)際開發(fā)中室抽,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:
首先,master分支應(yīng)該是非常穩(wěn)定的靡努,也就是僅用來發(fā)布新版本坪圾,平時(shí)不能在上面干活;
那在哪干活呢惑朦?干活都在dev分支上兽泄,也就是說,dev分支是不穩(wěn)定的漾月,到某個(gè)時(shí)候病梢,比如1.0版本發(fā)布時(shí),再把dev分支合并到master上梁肿,在master分支發(fā)布1.0版本蜓陌;
你和你的小伙伴們每個(gè)人都在dev分支上干活,每個(gè)人都有自己的分支吩蔑,時(shí)不時(shí)地往dev分支上合并就可以了
Git鼓勵(lì)大量使用分支:
查看分支:git branch
查看遠(yuǎn)程分支: git branch -a
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
合并分支代碼的內(nèi)容查看:git merge --no-ff -m '合并ysdev的H5中的跳轉(zhuǎn)' ysdev
刪除分支:git branch -d <name>
刪除遠(yuǎn)程不存在的本地分支:git fetch -p
合并分支時(shí)钮热,加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支烛芬,能看出來曾經(jīng)做過合并用git log --graph命令可以看到分支合并圖
帶參數(shù): git log --graph --pretty=oneline --abbrev-commit
向前查看log日志: git ref-loggit checkout -b 本地分支名 origin/遠(yuǎn)程分支名 從遠(yuǎn)程指定分支拉取到當(dāng)前新建分支
git add -A 提交所有變化
git add -u 提交被修改(modified)和被刪除(deleted)文件隧期,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件痴奏,不包括被刪除(deleted)文件推送本地分支 local_dev 到遠(yuǎn)程分支 dev 并建立關(guān)聯(lián)關(guān)系
①遠(yuǎn)程已有 dev 分支并且已經(jīng)關(guān)聯(lián)本地分支local_dev且本地已經(jīng)切換到local_dev
git push
②遠(yuǎn)程已有 dev 分支但未關(guān)聯(lián)本地分支local_dev且本地已經(jīng)切換到local_dev
git push -u origin/dev
③遠(yuǎn)程沒有有 dev 分支, 并本地已經(jīng)切換到local_dev
git push origin local_dev:dev修改分支名稱
git branch -m oldName newName別名
git config --global alias.co checkout
//自定義打印log
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -
%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
8.強(qiáng)制性推動(dòng)代碼
錯(cuò)誤信息如下:error: src refspec development does not match any.
error: failed to push some refs to 'https://gitee.com/liuchengding/YiBangAppiOS.git'
解決方案:git push origin HEAD:[branch]
9.提交一個(gè)空的文件路徑,其他人拉代碼時(shí)沒有該文件目錄厌秒,
解決方案:在終端读拆,cd 文件路徑,然后執(zhí)行 find . -type d -empty -exec touch {}/.gitignore ;
10.刪除遠(yuǎn)程不存在的本地分支:
git remote prune origin
11.回到制定提交的commit上
git reset --hard commitID
- 版本回退
問題描述: 當(dāng)正在開發(fā)新功能時(shí), 發(fā)現(xiàn)上一個(gè)發(fā)布的版本有bug,需要修復(fù)上線.此時(shí)要回退發(fā)布的版本去修改.
特別注意:
如果這個(gè)時(shí)候你立馬投入與bug的戰(zhàn)斗鸵闪,修改后發(fā)版本檐晕,那么你就犯了嚴(yán)重的錯(cuò)誤,因?yàn)槟阈薷暮蟮拇a是無法與正在開發(fā)的版
本合并噠蚌讼,也就是說你的修改并不能加入現(xiàn)有的代碼辟灰。所以:
通過標(biāo)簽回退版本后,要馬上拉一個(gè)分支篡石,然后當(dāng)前主干分支要立即回到原來的位置芥喇,否則正在開發(fā)的代碼可能白干了,接著
在剛拉的分支上修改bug凰萨,修改完畢合并到主干上
步驟: 1. 回退版本后继控,立即拉取分支,這里取名bugfix分支
2. 主干分支立即回到原來的位置
3. 切換到bugfix分支胖眷,修改bug
4. 修改后合并到主干上
5. 解決沖突, 打標(biāo)簽, 推送遠(yuǎn)程
- 丟棄本地修改
git checkout xxx(表示文件路徑)
二.應(yīng)對(duì)的問題
出現(xiàn)fatal: refusing to merge unrelated histories
需要允許合并 git pull --allow-unrelated-histories出現(xiàn)git branch --set-upstream-to=origin/<branch> master
則需要遠(yuǎn)程和本地倉庫關(guān)聯(lián): git branch --set-upstream-to=origin/遠(yuǎn)程倉庫 本地倉庫Git關(guān)于忽略Xcode工程中UserInterfaceState.xcuserstate文件
在忽略文件中加入:
project.xcworkspace
xcuserdata
UserInterfaceState.xcuserstate
project.xcworkspace/
xcuserdata/
UserInterface.xcuserstate
然后:
git rm --cached [YourProjectName].xcodeproj/project.xcworkspace/xcuserdata/
[ YourUsername].xcuserdatad/UserInterfaceState.xcuserstate
提交: git commit -m "Removed file that shouldn't be tracked"
//git命令鏈接地址
https://gitee.com/all-about-git
六武通、標(biāo)簽
列出所有tag
$ git tag
新建一個(gè)tag在指定commit
git tag V1.6.0 9d4b6557f67a0c43155cd665a5fdeec60d17a9d4
$
提交所有tag
$ git push [remote] --tags
七。強(qiáng)制推送本地代碼到git倉庫
進(jìn)到項(xiàng)目本地
然后
- git init
- git add .
- git commit -am “###” ——-以上3步只是本地提交
4.git remote add origin git@xx.xx.xx.xx:repos/xxx/xxx/xxx.git
5.git push origin 本 地分支:遠(yuǎn)程分支
6 git push -u origin master -f 強(qiáng)制push
八:提交git 超過100MB問題珊搀。解決如下:
終端執(zhí)行命令:git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch 超過100MB的文件名稱' --tag-name-filter cat -- --all