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

开源 0

问题

通过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调用。需要指定如何协调不同的分支。

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哈希值。这种行为可能会让用户感到困惑,因为看似无害的下载操作实际上会以不可预测的方式更改提交历史记录。

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

git pull --ff-only

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

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

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

git config --global pull.ff only

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

方案三

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

git config pull.ff true

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

git config pull.ff false

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

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次提交的历史版本:

➜  git:(test) git log -2			# 查看最近2次提交的历史版本commit 6018c237278f5265e78314049d6642e493ebdb0dAuthor: 流星Date:   Wed Jan 19 05:53:50 2023 +0800    合并之后commit 33df706e780d10af6435bda1fee85430604eebfdMerge: 1d06cd1f 7589979dAuthor: zzxDate:   Tue Jan 18 13:15:25 2023 +0800    合并之前

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

git:(test) git reset --hard 33df706e780d10af6435bda1fee85430604eebfd

再进行pull更新分支

git:(test) git pull origin test

最后再重新合并代码

git:(test) git merge dev

也许您对下面的内容还感兴趣: