最佳git同步代码的方式rebase
二者的具体区别,请各位百度下,这里不展开了,也不对选择哪一种进行暗示,请自己选择。简单说下就是前者保留了git历史,能查到pr合入过程的详细信息。后者强行理直了git树,变成线性,所有已经提交的commit都挪到身后,自己的提交放在最前面(可以通过git log查看),而且支持不断地rebase变基,使自己的代码始终保持在git的最前面,git树线性、简洁美观,分支操作省心,缺点是丢失了当初pr创
·
git代码同步有2种方式merge、rebase。二者的具体区别,请各位百度下,这里不展开了,也不对选择哪一种进行暗示,请自己选择。
区别:
- 前者保留了git历史,能查到pr合入过程的详细信息。git树上的时间戳按序排列。每一次提交记录保留,多了会被HW人鄙视,呵呵。
- 后者强行理直了git树,变成线性,所有已经提交的commit都挪到身后,自己的提交放在最前面(可以通过git
log查看),而且支持不断地rebase变基,使自己的代码始终保持在git的最前面,git树线性、简洁美观,分支操作省心,缺点是丢失了当初pr创建的历史信息,git树上commit的时间戳无序。
一张图说明:
鉴于rebase这样的特点,下面就给大家介绍下。下面就以OpenHarmony的ability_form_fmk仓库为例,讲解。
# 创建代码基准分支
git clone https://gitee.com/XXX/ability_form_fwk.git # 个人仓库克隆到本地,默认master分支
git remote add upstream https://gitee.com/openharmony/ability_form_fwk.git # 本地代码添加上游分支upstream
git remote -v # 查看与其它分支的关系
git pull upstream # 同步远程上游最新代码。注意不针对本地某个分支。
git checkout -b newest upstream/master # 切出基于上游upstream master分支的本地newest代码同步基准分支,当前分支时newest
git checkout master # 回归默认主分支
# 变基
git checkout newest # 每次更新代码时都基于基准分支
git pull # 必要。同一分支可能有更新
git checkout master # 切换到工作分支master
git rebase -i newest # rebase代码,将远程主仓代码作为自己代码的基础。可能有代码冲突,解决其中1个后,执行git rebase --continue继续解决冲突,全部解决后继续执行会完成合并
# 代码修改、添加到暂存区
git status
git diff
git branch -v
git add . # 将本地所有的修改都添加到git 暂存区
# 提交
git commit --signoff # 首次
git commit --amend # 第二次以后。该指令非常重要,它可以使你的PR永远只有1个commit
git push -u origin HEAD:master # 首次push。指令可以简化为git push, 默认提交到origin master分支,其它分支将master替换为指定分支名称
git push -f origin HEAD:master # 第二次push。指令可以简化为git push -f, 第一次push时需要使用-u参数
更多推荐

所有评论(0)