一: 分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了
-
Git鼓励大量使用分支:
查看分支:git branch
查看远程分支: git branch -a
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
合并分支代码的内容查看:git merge --no-ff -m '合并ysdev的H5中的跳转' ysdev
删除分支:git branch -d <name>
删除远程不存在的本地分支:git fetch -p
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并 -
用git log --graph命令可以看到分支合并图
带参数: git log --graph --pretty=oneline --abbrev-commit
向前查看log日志: git ref-log -
git checkout -b 本地分支名 origin/远程分支名 从远程指定分支拉取到当前新建分支
-
git add -A 提交所有变化
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件 -
推送本地分支 local_dev 到远程分支 dev 并建立关联关系
①远程已有 dev 分支并且已经关联本地分支local_dev且本地已经切换到local_dev
git push
②远程已有 dev 分支但未关联本地分支local_dev且本地已经切换到local_dev
git push -u origin/dev
③远程没有有 dev 分支, 并本地已经切换到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.强制性推动代码
错误信息如下: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.提交一个空的文件路径,其他人拉代码时没有该文件目录,
解决方案:在终端,cd 文件路径,然后执行 find . -type d -empty -exec touch {}/.gitignore ;
10.删除远程不存在的本地分支:
git remote prune origin
11.回到制定提交的commit上
git reset --hard commitID
- 版本回退
问题描述: 当正在开发新功能时, 发现上一个发布的版本有bug,需要修复上线.此时要回退发布的版本去修改.
特别注意:
如果这个时候你立马投入与bug的战斗,修改后发版本,那么你就犯了严重的错误,因为你修改后的代码是无法与正在开发的版
本合并哒,也就是说你的修改并不能加入现有的代码。所以:
通过标签回退版本后,要马上拉一个分支,然后当前主干分支要立即回到原来的位置,否则正在开发的代码可能白干了,接着
在刚拉的分支上修改bug,修改完毕合并到主干上
步骤: 1. 回退版本后,立即拉取分支,这里取名bugfix分支
2. 主干分支立即回到原来的位置
3. 切换到bugfix分支,修改bug
4. 修改后合并到主干上
5. 解决冲突, 打标签, 推送远程
- 丢弃本地修改
git checkout xxx(表示文件路径)
二.应对的问题
-
出现fatal: refusing to merge unrelated histories
需要允许合并 git pull --allow-unrelated-histories -
出现git branch --set-upstream-to=origin/<branch> master
则需要远程和本地仓库关联: git branch --set-upstream-to=origin/远程仓库 本地仓库 -
Git关于忽略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
六、标签
列出所有tag
$ git tag
新建一个tag在指定commit
git tag V1.6.0 9d4b6557f67a0c43155cd665a5fdeec60d17a9d4
$
提交所有tag
$ git push [remote] --tags
七。强制推送本地代码到git仓库
进到项目本地
然后
- 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 本 地分支:远程分支
6 git push -u origin master -f 强制push
八:提交git 超过100MB问题。解决如下:
终端执行命令:git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch 超过100MB的文件名称' --tag-name-filter cat -- --all
网友评论