非同名git分支的关联

重构



最新在对之前开发的一个美食类的小程序《今天吃什么星人》做重构。这个是我做的头一款小程序,基于labrador框架来开发的。小程序开发上架之后,就没再动过。后面大家发现这款小程序慢慢有点人气,打算拿出来再优化优化看看

大家重新设计了首页和美食页,然后轮到我这边来开发。

从初次开发到这次打算改版,已经又进行过三个小程序的开发,也算积累了不少经验。labrador, mpvue, wepy 这三款比较流行的框架都有接触和使用,其中最喜欢的算是mpvue了。

这次的改版,改动没多大,主要在UI上,所以是没打算做架构上的大改动。可是重构的时候遇到一些编译上的问题解决不了,而labrador已经被开发者放弃,好几个月没更新了。再想想这个项目后续可能还会有不少的改动。最后还是决定使用mpvue来改写一遍。

重构的时候,考虑到需要参照着之前的代码来改,就没用git checkout --orphan这样的方式新建分支,而是单独新建了一个同级文件夹来放置新代码。这样新旧代码可以同时参看,也可以使用微信开发者工具同时预览效果对比

代码提交

很快,整个项目重构完成了。这个时候,想往之前的项目里面新建一个new分支,把当前的新版的master分支提交过去。

一开始执行的git push;git push --tags, 提示No configured push destination

这才想起来,忘记配置项目的远程分支了:git remote add origin git@git.coding.net:xxxxx.git

然后再执行git push,提示被reject了。

直接git push,默认是推送到origin的master分支,这两个版本的分支进度不一样,所以被拒绝了。

调整命令,改成git push origin new:master。意思是推送本地的master分支到origin端的new分支

推送成功,到coding的后台一看,也有新分支了。代码算是初步提交成功

后续优化

接下来,执行git branch -u origin/new 使得本地的master分支能跟踪origin端的new分支,这样pull的时候,能顺利拉取。

完成之后,再尝试了一次git push,发现还是reject,原来是我的全局git配置里面配置了git.default 为 current。其作用是设定git push的默认行为是把当前分支推送到origin端同名的分支。所以在当前场景下,就会被reject

但是我又不想修改全局的配置。好在git是可以按项目来单独配置并覆盖全局配置的

执行git config push.default upstream,这样就使得git push的默认行为是推送到跟踪的远端分支

再执行git push,提示Everything up-to-date,成功!

参考资料:

  1. https://stackoverflow.com/questions/948354/default-behavior-of-git-push-without-a-branch-specified
  2. https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF
  3. https://gist.github.com/seanbuscay/5877413