Git push 代码时出现 FETCH_HEAD = [up to date] release -> origin/release hint: You have divergent branches

问题

通过Idea中的Git pull远程的release分支时出现如下错误:意思是你和修改的代码和远程的代码存在冲突,推荐使用git config pull. rebase false进行合并, 或者git config pull. rebase true进行Rebase或者git config pull. ff only仅快进。可以将git config替换为git config------global来设置默认值。首选所有存储库。你也可以传递rebaseno-rebase,或命令行上的ff-only,以覆盖配置的默认per调用。需要指定如何协调不同的分支。

java 复制代码
From git.dev.sh.ctripcorp.com:offline-react/projectName * branch release -> FETCH_HEAD = [up to date] release -> origin/release hint: You have divergent branches and need to specify how to reconcile them.  hint: You can do so by running one of the following commands sometime before hint: your next pull: hint: hint: git config pull. rebase false # merge hint: git config pull. rebase true # rebase hint: git config pull. ff only # fast-forward only hint: hint: You can replace "git config" with "git config --global" to set a default hint: preference for all repositories.  You can also pass --rebase, --no-rebase, hint: or --ff-only on the command line to override the configured default per hint: invocation.  Need to specify how to reconcile divergent branches.

解决方案

原因分析: 你拉取pull分支,其他人进行过merge合并更新操作,并在你之前已经push过,导致版本不一致,存在冲突。

方案一

根据报错提示执行git config pull.rebase false默认将pull下来的代码与现有改动的代码进行合并。可能会造成代码冲突,需要解决冲突。这个Idea会自动弹出冲突文件,选中后对双方修改的代码进行合并即可。

方案二

当您执行pullgit pull origin mastergit pull会执行合并,这通常会创建合并提交。因此,默认情况下,从远程拉取并不是一个无害的操作:它可以创建一个以前不存在的新提交SHA哈希值。这种行为可能会让用户感到困惑,因为看似无害的下载操作实际上会以不可预测的方式更改提交历史记录。

为了避免这种情况,你需要

java 复制代码
git pull --ff-only

(或不?请继续阅读,看看哪一个适合您的要求)

使用git pull --ff-onlyGit仅当可以"快进"而不创建新的提交时才会更新您的分支。如果无法完成此操作,git pull --ff-only只需中止并显示错误消息。

您可以将Git客户端配置为始终--ff-only默认使用,因此即使您忘记了命令行标志,您也会出现此行为:

java 复制代码
git config --global pull.ff only

注意:该--global标志将更改应用于计算机上的所有存储库。如果您希望仅对您所在的存储库执行此行为,请省略该标志。

方案三

如果您有Git 2.29或更高版本,您现在可以设置pull.fffalsetrueonly来消除警告。

java 复制代码
git config pull.ff true

true- 这是默认行为。如果可能的话,Pull会快进,否则会合并。

java 复制代码
git config pull.ff false

false-拉取永远不会快进,并且始终会创建合并。

java 复制代码
git config pull.ff only

only-如果可能,拉动将快进,否则操作将中止并显示错误消息。

这个新实现的功能存在一个错误,直到版本为止,2.35即使用户通过命令传递了三个标志之一,Git也会显示此警告git pull。此问题现已修复,请考虑将您的Git更新到版本2.36或更高版本。

方案四

这种解决方法仅适用于2个分支之间的合并git merge操作,比如你是将dev开发分支合并到test分支之前没pull,那这时候test分支需要回退到未合并前的版本。

test上合并上去的代码将会丢失,等你test分支能成功pull后,需要重新合并merge开发分支dev上的代码合并到test上。所以记得保留dev开发分支这个版本的代码再把test回退到上一个版本,等pull成功,再重新在test分支上合并dev分支代码。

查看最近3次提交的历史版本:

java 复制代码
➜  git:(test) git log -2			# 查看最近2次提交的历史版本
commit 6018c237278f5265e78314049d6642e493ebdb0d
Author: 流星
Date:   Wed Jan 19 05:53:50 2023 +0800

    合并之后

commit 33df706e780d10af6435bda1fee85430604eebfd
Merge: 1d06cd1f 7589979d
Author: zzx
Date:   Tue Jan 18 13:15:25 2023 +0800

    合并之前

根据历史版本记录,选择commit地址,回退到自己合并之前的版本

java 复制代码
git:(test) git reset --hard 33df706e780d10af6435bda1fee85430604eebfd

再进行pull更新分支

java 复制代码
git:(test) git pull origin test

最后再重新合并代码

java 复制代码
git:(test) git merge dev
相关推荐
码农颜几秒前
java 设计模式_行为型_19命令模式
java·设计模式·命令模式
Edingbrugh.南空1 分钟前
Apache Iceberg与Hive集成:分区表篇
大数据·hive·hadoop
悟空码字7 分钟前
支付宝开放平台,这谁写的,要扣绩效吧
后端
魔镜魔镜_谁是世界上最漂亮的小仙女7 分钟前
java-JDBC
java·后端
武子康7 分钟前
大数据-13-Hive 启动Hive DDL DML 增删改查 操作Hive的HQL
大数据·后端
@大迁世界9 分钟前
如何将一个 Git 项目关联到两个远程仓库(且不出错)
git
gorgor在码农10 分钟前
Spring Boot多数据源切换:三种实现方式详解与实战
java·spring boot·后端·mybatis·mybatis plus·多数据源切换
jarenyVO11 分钟前
Spring Cloud Gateway 全面学习指南
java·gateway
机灵小和尚14 分钟前
腾讯云 Teo H5直传CDN空间
后端·云计算·php·腾讯云·html5
追逐时光者22 分钟前
C#/.NET/.NET Core技术前沿周刊 | 第 42 期(2025年6.9-6.15)
后端·.net