步入公司的第一步就是掌握版本控制工具的使用,常见的版本控制工具有两种方式,git常见于一些小的创业公司,项目小人员少,svn使用的公司规模较大,这里介绍git使用的一些场景
假设小组中有两个人,组长,组员
场景一:组长创建项目并提交到远程Git仓库
场景二:组员从远程Git仓库上获取项目源码
场景三:组员修改了部分源码,提交到远程仓库
场景四:组长从远程仓库获取组员的提交
场景五:组员接受了一个新功能的任务,创建了一个分支并在分支上开发
场景六:组员把分支提交到远程Git仓库
场景七:组长获取组员提交的分支
场景八:组长把分支合并到主干
下图是Git与提交有关的三个命令对应的操作,Add命令是把文件从IDE的工作目录添加到本地仓库的stage区,Commit命令把stage区的暂存文件提交到当前分支的仓库,并清空stage区。Push命令把本地仓库的提交同步到远程仓库。
工作区:IDEA工具里面的内容
本地仓库:项目在本地的地址
1.创建D://test_master目录作为组长的本地仓库,D://test_dev目录作为组员的本地仓库,这里先创建一个hello的maven工程作为项目
2.下载git地址为:https://git-scm.com/downloads,默认安装的位置在C:\Program Files\Git\bin\git.exe
3.在IDEA中设置Git,在File–>Setting->Version Control–>Git–>Path to Git executable选择你的git安装后的git.exe文件,然后点击Test,测试是否设置成功:
5.设置自己的github账号,配置如下即可
6.复制自己的远程仓库地址,没有项目的时候不长这个样子,就把类似的地址复制下来即可
配置之前记录的github地址:https://github.com/huangxuechao1/helloworld.git 我的是这个
1.创建本地仓库,你可能会问本地仓库不是已经创建好了吗?,没错这里使用idea将你创建的文件夹作为本地仓库,之前的文件夹D://test_master只是一个文件夹而已,做完本次操作文件夹变成本地仓库。
选择D://test_master作为本地仓库
注意观察:此时hellowld颜色改变:由黄变绿
3.准备提交项目:commit
添加注释信息,点击commit提交,可以直接选择commit and push,跳过下一步,这里为了便于大家理解原理就不跳过了
4.准备push项目,到远程仓库
2.点击项目进行克隆
3.输入相关信息,测试能否通过
此时请确定自己是在组员即:D://test_dev仓库的项目,注意要克隆下来的嗷
组员修改了部分源码,提交到远程仓库:这里简单添加一下
这个操作和首次提交的流程基本一致,分别是 Add -> Commit -> Push。请参考场景一
获取更新有两个命令:Fetch和Pull,Fetch是从远程仓库下载文件到本地的origin/master,然后可以手动对比修改决定是否合并到本地的master库。Pull则是直接下载并合并。如果各成员在工作中都执行修改前先更新的规范,则可以直接使用Pull方式以简化操作。
注意此时切换为组员分支
建分支也是一个常用的操作,例如临时修改bug、开发不确定是否加入的功能等,都可以创建一个分支,再等待合适的时机合并到主干。
点击创建分治后创建一个hello的分支发现多了一个hello分支
注意,这里创建的分支仅仅在本地仓库,如果想让组长小张获取到这个分支,还需要提交到远程仓库。
1.使用Pull功能打开更新窗口,点击Remote栏后面的刷新按钮,会在Branches to merge栏中刷新出新的分支。这里并不想做合并,所以不要选中任何分支,直接点击Pull按钮完成操作。
2.点击刷新多了一个hello分支,点击hello分支,pull
点击remote branches,checkout as new local branch 创建分支,起名masterhello分支,做这一步的原因是因为主分支不能随意的更改,即使是组长也需要自己创建一个分支进行操作
此时一共有3个分支,master主分支,masterhello组长进行操作的分支,hello组员进行提交的分支
新功能开发完成,体验很好,项目组决定把该功能合并到主干上。
注意:此时还没有把项目推送到主分支奥,push一下,完成主分支的最新情况,不然别人克隆下来的还是之前的版本
聪明的你已经发现了,经过一系列的操作你已经理解了git的版本工具,下面用idea自带的终端进行操作,来加快我们的操作:
1.clone你的项目,参考场景二
2.分支操作
创建分支 git branch +自己起名字这里我用hello
3.每日拉取任务:git pull origin master
将远程指定分支 拉取到 本地指定分支上:
git pull origin <远程分支名>:<本地分支名>
将远程指定分支 拉取到 本地当前分支上:
git pull origin <远程分支名>
将与本地当前分支同名的远程分支 拉取到 本地当前分支上
git pull
4.每日提交任务
使用命令:git push origin 分支名推送
将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反):
git push origin <本地分支名>:<远程分支名>
将本地当前分支 推送到 与本地当前分支同名的远程分支上(注意:pull是远程在前本地在后,push相反):
git push origin <本地分支名>
将本地当前分支 推送到 与本地当前分支同名的远程分支上
git push
git init:初始化本地库
git status:查看工作区、暂存区的状态
git add :将工作区的“新建/修改”添加到暂存区
git rm --cached :移除暂存区的修改
git commit :将暂存区的内容提交到本地库
tip:需要再编辑提交日志,比较麻烦,建议用下面带参数的提交方法
git commit -m “提交日志” :文件从暂存区到本地库
git log:查看历史提交
tip:空格向下翻页,b向上翻页,q退出
git log --pretty=oneline:以漂亮的一行显示,包含全部哈希索引值
git log --oneline:以简洁的一行显示,包含简洁哈希索引值
git reflog:以简洁的一行显示,包含简洁哈希索引值,同时显示移动到某个历史版本所需的步数
git reset --hard 简洁/完整哈希索引值:回到指定哈希值所对应的版本
git reset --hard HEAD:强制工作区、暂存区、本地库为当前HEAD指针所在的版本
git reset --hard HEAD^:后退一个版本
tip:一个^表示回退一个版本
git reset --hard HEAD~1:后退一个版本
tip:波浪线~后面的数字表示后退几个版本
git diff:比较工作区和暂存区的所有文件差异
git diff :比较工作区和暂存区的指定文件的差异
git diff HEAD|HEAD^|HEAD~|哈希索引值 :比较工作区跟本地库的某个版本的指定文件的差异
git branch -v:查看所有分支
git branch -d <分支名>:删除本地分支
git branch <分支名>:新建分支
git checkout <分支名>:切换分支
git merge <被合并分支名>:合并分支
tip:如master分支合并 hot_fix分支,那么当前必须处于master分支上,然后执行 git merge hot_fix 命令
tip2:合并出现冲突
①删除git自动标记符号,如<<<<<<< HEAD、>>>>>>>等
②修改到满意后,保存退出
③git add
④git commit -m “日志信息”,此时后面不要带文件名
git clone <远程库地址>:克隆远程库
功能:①完整的克隆远程库为本地库,②为本地库新建origin别名,③初始化本地库
git remote -v:查看远程库地址别名
git remote add <别名> <远程库地址>:新建远程库地址别名
git remote rm <别名>:删除本地中远程库别名
git push <别名> <分支名>:本地库某个分支推送到远程库,分支必须指定
git pull <别名> <分支名>:把远程库的修改拉取到本地
tip:该命令包括git fetch,git merge
git fetch <远程库别名> <远程库分支名>:抓取远程库的指定分支到本地,但没有合并
git merge <远程库别名/远程库分支名>:将抓取下来的远程的分支,跟当前所在分支进行合并
git fork:复制远程库
tip:一般是外面团队的开发人员fork本团队项目,然后进行开发,之后外面团队发起pull request,然后本团队进行审核,如无问题本团队进行merge(合并)到团队自己的远程库,整个流程就是本团队跟外面团队的协同开发流程,Linux的团队开发成员即为这种工作方式。
<远程库地址>:新建远程库地址别名
git remote rm <别名>:删除本地中远程库别名
git push <别名> <分支名>:本地库某个分支推送到远程库,分支必须指定
git pull <别名> <分支名>:把远程库的修改拉取到本地
tip:该命令包括git fetch,git merge
git fetch <远程库别名> <远程库分支名>:抓取远程库的指定分支到本地,但没有合并
git merge <远程库别名/远程库分支名>:将抓取下来的远程的分支,跟当前所在分支进行合并
git fork:复制远程库
tip:一般是外面团队的开发人员fork本团队项目,然后进行开发,之后外面团队发起pull request,然后本团队进行审核,如无问题本团队进行merge(合并)到团队自己的远程库,整个流程就是本团队跟外面团队的协同开发流程,Linux的团队开发成员即为这种工作方式。