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
相关推荐
菜鸡儿齐7 小时前
spark组件-spark core(批处理)-rdd创建
大数据·分布式·spark
缺点内向7 小时前
Java:创建、读取或更新 Excel 文档
java·excel
带刺的坐椅8 小时前
Solon v3.4.7, v3.5.6, v3.6.1 发布(国产优秀应用开发框架)
java·spring·solon
四谎真好看9 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
weixin_177297220699 小时前
家政小程序系统开发:打造便捷高效的家政服务平台
大数据·小程序·家政
桦说编程9 小时前
深入解析CompletableFuture源码实现(2)———双源输入
java·后端·源码
java_t_t9 小时前
ZIP工具类
java·zip
舒一笑10 小时前
大模型时代的程序员成长悖论:如何在AI辅助下不失去竞争力
后端·程序员·掘金技术征文
lang2015092810 小时前
Spring Boot优雅关闭全解析
java·spring boot·后端
galaxylove10 小时前
Gartner发布数据安全态势管理市场指南:将功能扩展到AI的特定数据安全保护是DSPM发展方向
大数据·人工智能