git和svn对比:
SVN需要一个单独的服务器
Git不需要: 文件中、U盘中、云上、github、OSChina...
一、建立代码仓库(专门用于团队开发的代码仓库)
切换目录 cd /Users/wjq/Desktop/git演练/公司/weibo
建立空白代码库(专门用于团队开发) git init --bare
注意: 这个仓库仅仅是用于管理代码, 不参与开发
二、项目经理初始化项目
》2.1先克隆一份空得仓库到本地
切换目录 cd /Users/wjq/Desktop/git演练/经理
git clone /Users/wjq/Desktop/git演练/公司/weibo/
》2.2忽略不需要加入版本控制器的文件以及文件夹 参考网址:https://github.com/github/gitignore
.gitignore
注意: 配置忽略文件只需要到github上搜索.gitignore拷贝别人写好的代码即可
配置.gitignore一定要在和.git隐藏文件夹同一级的目录下
》2.3生成好.gitignore文件之后, 还需要将.gitignore文件添加到版本控制
git add .gitignore
git commit .gitignore -m””
》2.4新建项目
》 source conrol—>commit 将代码提交到本地仓库
》source conrol—>push 将代码提交到远程仓库
git中默认就会创建一个分支, 这个分支叫做origin/master, 相当于svn中的trunk
专业人员只需要在git仓库的hooks文件夹中写一些指令, 就可以完成自动测试(压力测试、自动测试、集成测试、冒烟测试、。。。)
》 和SVN一样, 如果服务器仓库的代码被修改了, 我们再提交代码也会报错。
fetch first == out of data
总结:
git和svn最大的区别
》1.git每次修改新增都需要add
》2.git每台电脑都有一个仓库
》3.git是先提交到本地仓库, 再提交到远程仓库
git的分支管理
分支管理 - Tag
# 查看当前标签
$ git tag
# 在本地代码库给项目打上一个标签
$ git tag -a v1.0 -m 'Version 1.0'
注意: 此时此刻打上的这个标签仅仅是一个本地标签。(和服务器没有关系)
#查看某个标签的信息用
$ git show v1.0
#删除某个标签
$ git tag -d v1.0
# 将标签推送到远程代码库中
$ git push origin v1.0
# 将所有标签一次推送到远程代码库中
$ git push origin --tags
删除远程的标签,你可以到github上删除,也可以
先删除本地的
git tag -d v1.0
删除远程的
git push origin :refs/tags/v1.0
# 使用tag,就能够将项目快速切换到某一个中间状态,例如产品开发线上的某一个稳定版本
# 签出v1.0标签
$ git checkout v1.0
# 从签出状态创建v1.0bugfix分支
$ git checkout -b bugfix1.0
# 查看远程分支
$ git branch -r
# 删除远程分支
$ git branch -r -d origin/bugfix1.0
开发流程:
1.开发2.发布3.保存稳定版本4.继续开发5.出现bug
6.分配员工到分支上修复bug
>员工从服务器下载最新代码
》员工利用git checkout v1.0指令快速切换到1.0版本
》根据提示:开启一个新的分支开始修复代码
git checkout -b 1.0bug_fix
7.合并修复后的代码到主线
8.备份稳定版本
分支管理 - branch
分支查看
git branch 查看本地分支 (*标识的是你当前所在的分支)
git branch -r 查看远程分支
git branch -a 查看所有分支
分支创建
git branch 分支名 创建本地分支
git checkout 分支名 切换本地分支
git checkout -b 分支名 创建+切换分支
备注:要想基于某一个分支创建新分支,先切换到这一分支下再创建新分支
git checkout --track origin/分支名 远程分支和本地分支需要区分好,所以,在从服务器上拉取特定分支的时候,需要指定远程分支的名字
(注意该命令由于带有--track参数,所以要求git1.6.4以上!这样git会自动切换到分支。)
git push origin 分支名 远程分支就是本地分支push到服务器上。比如master就是一个最典型的远程分支(默认)
git push origin <local_branch_name>:<remote_branch_name> 提交分支数据到远程服务器(一般当前如果不在该分支时,使用这种方式提交)
git pull origin 分支名 从远程获取某一分支
git checkout -b 分支名 origin/分支名 创建远程的dev分支到本地
分支删除
git branch -d 分支名 删除本地分支
git push origin :分支名 删除服务器远程分支(分支前的冒号代表删除)
分支合并
合并到master中
git checkout master 切换到master
git merge 分支名 合并某一分支到master分支
git checkout dev git pull git checkout master git merge dev git push -u origin master
git checkout master git pull git checkout dev git merge master git push -u origin dev
一个分支的代码完全替换另外一个分支的指令:
git push origin develop:master -f
举个例子:
这时如果你很幸运,直接合并成功。悲伤的事情总是时有发生,“合并发生冲突”是常有的事,因此一旦出现类似下面的提示
CONFLICT (content): Merge conflict in ...
Automatic merge failed; fix conflicts and then commit the result.
就得自己动手解决冲突了,git会用
<<<<<<<HEAD
master原有的内容(当前分支内容)
=======
debug分支中冲突的内容(另一分支内容)
>>>>>>>debug
这样的格式提醒你,只要修改保留实际需要的内容后即可解决冲突,解决冲突后就可以执行git commit。
解决冲突的具体步骤:
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息" (注意:此时commit一定不能带具体文件名)
好了,我们合并了master和debug,
想看看git是怎么记录合并的,没问题,
git log --graph --pretty=oneline --abbrev-commit
就可以直接看到分支合并的过程
