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
相关推荐
皮皮林5512 分钟前
Java+Selenium+快代理实现高效爬虫
java
【本人】16 分钟前
Django基础(二)———URL与映射
后端·python·django
Humbunklung34 分钟前
Rust 模块系统:控制作用域与私有性
开发语言·后端·rust
失重外太空啦42 分钟前
Mysql练习
android·数据库·mysql
Arthurmoo44 分钟前
Linux系统集群部署模块之Keepalived双机热备
linux·git·github
像风一样自由20201 小时前
Navicat操作指南:MySQL数据库配置与Todo应用部署
数据库·mysql·adb
hqxstudying1 小时前
Java行为型模式---策略模式
java·开发语言·建造者模式·适配器模式·策略模式
lxsy1 小时前
spring-ai-alibaba 简化版NL2SQL
java·nl2sql·spring-ai·ai-alibaba
WanderInk1 小时前
依赖对齐不再“失联”:破解 feign/BaseBuilder 错误实战
java·后端·架构
菜鸡上道1 小时前
Maven入门指南:生命周期、阶段和执行顺序详解
java·maven