问题
通过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
来设置默认值。首选所有存储库。你也可以传递rebase
,no-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
会自动弹出冲突文件,选中后对双方修改的代码进行合并即可。
方案二
当您执行pull
时git pull origin master
,git pull
会执行合并,这通常会创建合并提交。因此,默认情况下,从远程拉取并不是一个无害的操作:它可以创建一个以前不存在的新提交SHA
哈希值。这种行为可能会让用户感到困惑,因为看似无害的下载操作实际上会以不可预测的方式更改提交历史记录。
为了避免这种情况,你需要
git pull --ff-only
(或不?请继续阅读,看看哪一个适合您的要求)
使用git pull --ff-only
,Git
仅当可以“快进”而不创建新的提交时才会更新您的分支。如果无法完成此操作,git pull --ff-only
只需中止并显示错误消息。
您可以将Git
客户端配置为始终--ff-only
默认使用,因此即使您忘记了命令行标志,您也会出现此行为:
git config --global pull.ff only
注意:该--global
标志将更改应用于计算机上的所有存储库。如果您希望仅对您所在的存储库执行此行为,请省略该标志。
方案三
如果您有Git 2.29
或更高版本,您现在可以设置pull.ff
为false
、true
或only
来消除警告。
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