需求来源

git 分支合并

问题描述

使用 git merge 在本地执行分支合并操作,然后想 push 到 gerrit 上评审入库,可是在提交时,提示:

 ! [remote rejected] HEAD -> refs/for/dev (no new changes)

分析:no new changes 的意思,是说,这个合并,是个线性的合并。而合并的那些历史的 commit 节点,在 gerrit 上都已经评审过了,都是已有的 change 单,所以 gerrit 认为没有新的提交,就不让你提交评审。

如下图所示,bugfix分支基于master线性变化,git merge时,git会利用fast farward快进合并,即master指针移到bugfix处。
在这里插入图片描述

解决方式

在 git merge 的时候,加上 --no-ff 参数,是为了让它生成一个新的 commit,这样就可以提交了~

-- 回退本地提交,回退至merge之前
git reset --hard HEAD^
-- 重新合并
git merge --no-ff develop

上面的参数,–no-ff即禁用fast farward

扩展知识

分支管理

廖雪峰老师讲的《分支管理策略》
https://www.liaoxuefeng.com/wiki/896043488029600/900005860592480

分支合并

猴子都能懂的Git指导,文章讲得很好,图文并茂,生动形象,通俗易懂,推荐。
https://backlog.com/git-tutorial/cn/stepup/stepup1_4.html

多理解下merge和rebase差异。目的都是合并,历史记录差异。

想起之前的一句网络语言,你是猴子请来的救兵么?

历史记录

git查看各个branch之间的关系图

使用git log命令

git log --graph --decorate --oneline --simplify-by-decoration --all

说明:
–decorate 标记会让git log显示每个commit的引用(如:分支、tag等)
–oneline 一行显示
–simplify-by-decoration 只显示被branch或tag引用的commit
–all 表示显示所有的branch,这里也可以选择,比如我指向显示分支ABC的关系,则将–all替换为branchA branchB branchC

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐