git命令总结

对于git,以一个完整的提交代啊过程,以及提交过程中遇到的问题为例做一个简单总结。

一般正规企业都会有代码版本管理,目前比较流行的是git+gerrit,并且代码一般都分为集成流Debug_Dev以及集成流Int。开发流用于版本测试,测试通过了代码才会提交集成流,然后再测试集成流,可以的话才能发布release的版本。下面是完整的代码提交过程,写的比较简单,其实有时候是会出现问题的,常见的问题我也做了一个总结。


对命令做如下说明
1.项目名Demo为例,对应的开发流是Demo_Debug_Dev,集成流是Demo_Int,自动换成自己对应的项目
2.代码的地址以10.1.11.27为例,实际中换成对应的ip


一、克隆代码相关

查看有权限的代码库
ssh -p 29418 10.1.11.27 gerrit ls-projects

如果采用那个的是git+gerrit方式,进入gerrit对应的项目,会有开发流和集成流的代码下载命令,注意选择ssh方式
下载开发流代码
git clone ssh://10.1.11.27:29418/Demo/packages/apps/xxxxx.git  -b Demo_Debug_Dev   

下载集成流代码
git clone ssh://10.1.11.27:29418/Demo/packages/apps/xxxxx.git  -b Demo_Int

第一次需要下载hooks到当前git中,进入项目根目录
scp -P 29418 -p 10.1.11.33:/hooks/commit-msg .git/hooks


二、提交代码到开发流相关

更新本地库的代码
git pull --rebase
git remote update 

查看本地代码与本地库代码的改动,知道那些代码添加到了待提交
git status

添加想要提交的代码目录
git add src/com/android/daima.java  
如果是你的项目中删除了文件,需要
git rm  src/com/android/daima.java  

将代码提交到本地库,username换成自己的用户名
git commit -s -m "TFS_797:username_app_your modify state"

从本地库提交到开发流
git push origin HEAD:Demo_Debug_Dev

如果发现提交有误,想回到commite之前
将当前的工作目录完全回滚到指定的版本号
git reset  bbaf6fb5060b4875b18ff9ff637ce118256d6f20
版本号通过git log 查看,下面红框里面的内容


三 、开发流编译通过以后,提交集成流

git log 查看提交到开发流的ID

切换到集成流
git checkout CoolWatch_Int

查看当前分支
git Branch

选择要提交的代码
集成流所有的改动: git cherry-pick CoolWatch_Debug_Dev
自己的改动:git cherry-pick ID
上面的ID就是git log看到的,同样是红框的内容,将这个改变加入到集成流的本地代码仓库

提交到集成流
git push origin HEAD:refs/for/Demo_Int

-------------------------------------------------------------------------以上提交任务就完成了,可以开始启动hudson服务器编译版本了---------------------------------------------------------------------------------

四、说些解决常见问题的方法

1.开发流、集成流特别涉及多个开发人员更改一个模块时,push的时候经常会发生冲突,仔细看错误的提示,一般都是提示没有rebase代码。
什么意思呢,就是说你每次提交代码的时候没有更新服务器的最新代码,没有在最新的代码上更改,git的安全策略是不允许A的更改
直接覆盖B的更改的,这时候会提示冲突,这种问题我一般省的麻烦直接check out 到开发流/集成流(哪个流发生冲突那个流),采用下面的步骤:
a.git reset HEAD ,将本地的代码仓库覆盖
b.git pull --rebase  这个命令一定要形成使用的习惯,时常就是楼操作了它造成了代码冲突
c.将workspace中的项目中的更改同步到Demo_Int
d.再次add commit push 提交
注意第三步,项目一定要copy一份到workspace中,集成流/开发流的代码放在另外的目录,不然你刚才reset hard后,之前的更改就都没有,你就哭吧
ps:当然了,你也可以解决冲突,如果你不喜欢上面的简单粗暴的话

2.还有一个比较麻烦的,通常Dev的代码是push了以后就在服务器,而Int是push后需要merge的,merge不上去怎么办,如果不按照提交的事件merge也是会冲突的哦
,之前说过怎么将commit的回退,现在是说将push的回退,注意区别,采用下面的步骤
a.git reset --hard --hard remotes/origin/Debug_Int 将本地的代码仓库覆盖
b.git pull --rebase  
c.将workspace中的项目中的更改同步到Demo_Int
d.再次add commit push 提交
跟四_1中只有第一步不一样而已,看到了吧

3.有时候提交代码时提示missing changed-id,钩子明明下了啊,喂,不慌,采用下面的步骤
a.重新下载钩子
b.然后 git commit -s --amend
c.最后push
这个时候一般都是add过了,所以只用commit然后push


----------------------------------------over,ps:经常用的不用看,但是感觉又不是写给新手看的奋斗,对,我是写给自己看的大笑----------------------------------------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值