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 merge最简洁用法
一、开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支
git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master
二、当master代码改动了,需要更新开发分支(dev)上的代码
git checkout master
git pull
git checkout dev
git merge master
git push -u origin dev
参考一
假设每个人有个开发分支,想隔一段时间就把自己的开发分支上的代码保持和测试分支一直,则需要如下操作:
我想将test分支上的代码完全覆盖dev分支,首先切换到dev分支
git checkout dev
然后直接设置代码给远程的test分支上的代码
git reset --hard origin/test
执行上面的命令后dev分支上的代码就完全被test分支上的代码覆盖了,注意只是本地分支,这时候还需要将本地分支强行推到远程分支。
git push -f
————————————————
参考一
git push origin develop:master -f
把本地的 develop 分支强制(-f)推送到远程 master
但是上面操作,本地的 master 分支还是旧的,通常来说应该在本地做好修改再去 push 到远端,所以我推荐如下操作
git checkout master // 切换到旧的分支
git reset --hard develop // 将本地的旧分支 master 重置成 develop
git push origin master --force // 再推送到远程仓库
————————————————
举个例子:
这时如果你很幸运,直接合并成功。悲伤的事情总是时有发生,“合并发生冲突”是常有的事,因此一旦出现类似下面的提示
-
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
就可以直接看到分支合并的过程
备注:vscode 用git 拉取代码,提示:在签出前,请清理存储库工作树 解决办法
// 手动解决
git stash
git pull
git stash pop
// 放弃本地修改,直接覆盖
git reset --hard
git pull
解释命令作用
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
-> stash save(把自己的代码隐藏存起来) -> 重新pull -> stash pop(把存起来的隐藏的代码取回来 ) -> 代码文件会显示冲突 -> 打开文件解决冲突 ->commit&push
手动解决完冲突文件后,然后
git add .
git commit -m '注释信息'
git push
即可