小马刚当上程序员,有一天老大说,咱们团队要使用git了。大家准备一下。
结果第二天就让用git管理代码。
听领导说,我们线上分三个分支 master主分支,其实就是首次部署代码的时候用一下,线上正式环境的分支是release分支。然后我们测试用的分支是develop 分支。
领导要求我们在 develop 上做好测试,然后发布到release分支上,然后上生产。
首先必须安装git 这个window下,下一步就可以。mac自带的git,但是权限有点复杂。
我先做好基本的配置,用户名,邮箱,密码,和ssh之类的。完成之后呢我就有权利拉去代码修改并提交代码。
新建一个文件夹,作为自己的项目文件
进入文件,点击右键会出现 Git Bash Here 进入类似cmd的命令模式
我首先要把代码克隆到本地
git clone *********(代码地址)
查看了线上的分支有哪些 。
git barnch -r //查看线上的分支
git branch // 查看本地的分支
我看到线上有三个分支
origin/master
origin/release
origin/develop
然后我需要把线上的 release和develop都拉去到本地 master就不用了
拉取线上的代码的方法:
方法一
使用如下命令:
git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。
方式二
使用如下命令:
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
我觉得第一种方式舒服一点
我使用了两次,将远端的两个分支都取下来
git checkout -b release origin/release
git checkout -b develop origin/develop
这时候我本地就有了两个分支
我使用git branch
查看的时候就看到了
release
develop
领导要求我们不能直接在release分支和develop分支上直接做修改,要自己建分支。然后merge到分支上去
我们的生产代码都在release上,所以呢我需要从release 上新建一个分支出来
注意:一定要总是从release 上获取代码,然后做开发。千万不要从测试上拉一个分支去做开发。保证你的代码根源是线上最新的。
首先我要确保release 分支上的代码是最新的,so ,我先切换分支到release上
git checkout release ( 当然你已经在这个分支就不用切换)
问题来了我怎么知道我在那个分支呢。
用git 打开自己clone的项目的时候就可以看到自己的项目是什么分支
admin@PC MINGW64 /d/photo/PhotoWall (dev) //括号里面就说明你在dev分支
然后我拉去了线上最新的代码
git pull
然后 我查看了代码的提交记录
git log 看到时间很近 是最新的代码
点击q 退出查看
这时候我要自己做开发,我新建了一个xiaoma分支
git checkout -b xiaoma
这时候我的分支切换成了xiaoma分支
然后我就动手编写我的代码
。。。。努力耕耘了一天,甚是乏累。。。
然后在下班临走前,我完成了我的任务我需要测试和发布
我首先查看一下我修改了哪些文件,以及我现在处于的状态。
git status
看到我修改了很多文件。
然后呢我要看一下这些代码是不是我想要去提交的
git diff
会列出你修改的哪些地方,然后呢对比一下 是不是修改了这些。确定没有dump. alert 之类的低级错误。然后呢
我需要把我的代码添加到工作区
git add . (注意后面的 点 号 指的是 所有的编辑文件都加进去)
这里会有一个问题是 我有一些是不需要版面控制的文件要添加进版本忽略里面(可以自己查一下)
然后呢 我把代码提交进 我自己的xiaoma分支上去
git commit -m "小马一天努力的结果"
提交了代码之后。我要做测试
所以我要把代码发布到develop 上自己看看效果。所以我要把分支切换到develop 上
git checkout develop
拉取最新的代码
git pull
合并一下我的xiaoma 分支
git merge xiaoma -m "测试合并"
然后我测试之后觉得我的代码完全符合生产的条件
我再次切换到release 分支
git checkout release
这时候我的队友已经提交了代码 所以我需要再次拉取最新的代码
git pull
之后我需要把代码merge到线上release
但是我们的领导有要求了,你们提交的线太乱了,不利于维护,所以你们必须保证提交的是一条线。学习一下rebase。。。
我拉取了release最新的代码之后, 我切换到我的xiaoma 分支。对现在的relaese 进行rebase操作。
git checkout xiaoma
git rebase release //相对于release 变基
完成之后
切换回 release 分支上
git merge xiaoma --no-ff
然后我的代码就到了release 分支上,并且线条很完美。 –no–ff 是不快速合并,会在提交线上出现一个新轨道,包换你的所有提交记录。然后最后合并到release 分支上。如果在自己分支上只做了一次提交。 就不用–no-ff
git push origin release
任务完成。。。
这里要注意。
-
在develop 做测试的时候不进行rebase 操作。因为你的这个分支需要在后面和release进行rebase所以呢,不要对develop进行rebase操作。可以在xiaoma的基础上新建一个xiaoma2 让xiaoma2 对develop进行rebase .
-
代码冲突
修改冲突 再次提交就好
git add .
git commit -m “代码解决冲突” -
rabase 冲突
在rebase过程中冲突
解决冲突之后,
git add .
然后继续
git rebase –continue
还有两个选项
git rebase –skip (不要用,除非这是你想要的。他会忽略你的这次提交)
git rebase –abort 退出rebase -
忽略管理文件
git update-index –assume-unchanged 文件名/文件。 #忽略跟踪
git update-index –no-assume-unchanged 文件名/文件 #恢复跟踪 -
一般查看记录在window上可以用gitk 会弹出一个 提交记录框。可以看到大家的所有提交,每条记录都有版本号(数字很长,但是前六位数字码,就可以标识一个记录,这个很关键是你每次提交的记录标识)可以使用 git resert –hard 123456 就可以回到这个提交点
-
学会使用 git log 查看提交记录之类的 有很多参数可以使用
-
删除无用的分支
git branch -D xiaoma 分支就可以删除
git branch -d xiaoma
大小写的区别在于这个分支有没有被合并过,d 没有合并过不允许删除,所以经常使用大写D ,注意是不是有用分支就行 -
关于软件学习 git 软件推荐使用小乌龟 TortoiseGit