创建tag
当我们开发完某一个重要的功能,或者实现了一个里程碑后,在提交代码后,可以打一个tag,以便以后创建分支,查找
git tag 版本号
查看tag
git tag
创建附加标签(可以加一些标注)
git tag -a 版本号 -m "标注信息"
// 查看标注信息
git show 版本号
将tag推送到远程仓库
// 将某一个tag推送到远程仓库
git push 远程仓库名 版本号
// 将本地所以tag推送远程
git push 远程仓库名 --tags
删除tag
// 删除本地tag
git tag -d 版本号
// 删除远程tag
git push 远程仓库名 -d 版本号
检出tag
当我们想回到某个tag进行查看,我们通常在检出tag后创建一个新的分支(分支在后面)
// 检出tag
git checkout 版本号
git基本原理
git的基本原理,都是已文件形式保存,大家了解就行,有助于理解分支
创建分支
git中创建分支非常简单,相当于创建了一个可移动的指针
git branch 分支名
切换到新分支
git checkout 分支名
// 创新新分支并切换到新分支
git checkout -b 分支名
分支的合并
//把分支2的内容合并到分支1,先切换到分支1
git merge 分支2
解决合并冲突
应用场景1
当你的项目打上tagv1.0.0发布后,你在当前dev分支继续开发新功能,用户发现你发布的项目有bug,你需要改,先切换到tagv1.0.0然后创建新分支hotfix,在hotfix上修改完bug后,重新打tagv1.0.1发布时你dev分支依然存在bug,可以合并hotfix分支
查看分支
git branch
删除分支
// 删除的是指针,提交历史不会被删除
git branch -d 分支名
git的工作流
master分支用来发布稳定版本,在develop分支进行开发,新功能(可能要可能不要)就在feature分支开发,当master发布的版本有问题,就切换到tag创建hotfix分支修改,修改后合并master重新打tag发布,也合并到develop,当功能开发完,需要测试,就创建release分支测试,并改bug,之后发布,合并develop
git的远程分支
这里再说个简单的,本地仓库添加远程仓库的方法,创建本地,远程仓库后
# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
方法一:此时两个仓库已经关联,但本地分支与远程分支没有关联,
// 创建新分支,并与远程master分支关联
// 如果你本地分支也叫master,先创建个别的分支,把master删除了,之后把新创建的分支合并,也可以删除
// 这样简单,直接把本地分支与远程分支关联了,省了很多别的操作
git checkout --track origin/master
master分支是远程仓库关联拉下来的,与本地新建分支没关系,合并会报错
// 当你合并本地分支时,会报refusing to merge unrelated histories
// 这是两个没有共同祖先,也就是毫不相关的两个仓库,添加--allow-unrelated-histories
git merge develop --allow-unrelated-histories
此时本地仓库与远程仓库已经关联,并且分支已经关联
方法二
git checkout 分支名
将本地分支推送远程
git push origin develop
// 此时远程已有develop,并且内容已经推送
//当我们第二次push
//提示 git push --set-upstream origin develop 设置上游分支
git push --set-upstream origin develop
// 或者
git branch --set-upstream-to=origin/develop
// 之后push就ok了
拉取远程分支到本地
git checkout 分支名
//三步操作
//先看远程是否有这个分支
//有的话,本地创建
//跟踪远程
删除远程分支
git push origin -d 远程分支名
git rebase使用
与marge差不多,用来合并
用marge进行合并
用rebase进行合并
rebase的log图是线性的
// 当在experiment分支开发好后,在experiment分支进行操作
git rebase master
//原理就是改变experiment的base为master
git checkout master
git merge experiment
//这样就ok了
rebase与marge的选择
rebase的提交记录是线性的,简洁
merge拥有所有提交记录
注意:永远不要在主分支master上使用rebase