git使用之——如何减少废弃单子

114 阅读3分钟

由于工作中代码库使用的是gerrit,本文场景也是基于gerrit实操

合库原则

  • 原则1:合代码前更新库代码:git pull --rebase
  • 原则2: 常用git status,确认当前修改的是不是都要提交

场景一:在新下的代码中合库

直接clone一份代码,立即合入代码,入库。这种情况很少出现冲突,建议如下操作步骤:

  1. git clone .... // 从gerrit库 clone代码到本地
  2. 用merge工具合入修改的代码
  3. git add . git add --all // 如果是有新增的文件,要用后者才能把新增的文件add到staged状态
  4. git commit // 按规定格式填好log信息。 这一步可以和上一步合并:git commit -a
  5. git push origin HEAD:refs/for/xxx // 推送到gerrit进行走查,xxx为分支名称。建议自己到gerrit确认一下代码是否ok(别遗漏修改、别多改)

场景二:在非最新代码中合库

本地已有之前clone的代码,但是已有一段时间了。这种情况直接修改较有可能出现冲突,故需要先更新本地代码。建议如下操作步骤:

1、 git pull --rebase // 更新代码,这种更新方式适合本地还没有任何修改;如果本地已有修改且不需要了,可以 git reset --hard HEAD && git pull 强制更新到最新

2、后续同场景一的第2步 ~ 第5步

场景三:对走查意见增补提交

本地已推送的代码,走查时发现问题,需要amend修改。这种情况可以直接amend,但有可能出现冲突,所以最好先更新本地代码。建议如下操作步骤:

1、git pull --rebase // 只能用这种方式更新,这样更新后可保证本地代码与库里代码一致,且之前推送走查的那个commit位于第一个(可git log 确认)

2、同场景一的第2步 ~ 第3步

3、git commit --amend // amend参数表示以增补的方式修改,也就是这次合入的代码会增补到你之前推送走查的那个commit。如果没有第一步,本操作可能失败或生成一个新的commit

4、同场景一的第5步

场景四:入库冲突

推送到gerrit的代码,提示Cannot Merge。这种情况说明没有按前面场景二、场景三先更新本地代码,如果先更新了代码再推送,几乎不可能出现这个问题。建议如下操作:

1、git pull --rebase // 只能用这种方式更新,此时不会正常更新成功,而是出现冲突提示,有冲突的文件名前面会带 Conflict ...字样

2、打开冲突文件,解决冲突,具体见下面 Conflict解决

3、git add 冲突文件 // 有几个就add几个,当然也可以 git add .

4、git rebase --continue // 完成rebase操作,此时代码已更新到与gerrit一致了,可以git log确认,你的commit应该位于第一个

5、同场景一的第5步