【Git】pull 分支报错 fatal: Need to specify how to reconcile divergent branches.

文章讲述了在使用Git客户端从远程仓库拉取代码时遇到的冲突提示,介绍了两种解决方法:代码合并或回退到合并前版本并重新拉取。还强调了良好的Git发布流程和分支管理实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 通过git客户端工具拉取更新代码报错:
# git pull

From xxxx.xxx.com:aits/data-intergration
   93e7e5e..da0275b  test -> origin/test 

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.
fatal: Need to specify how to reconcile divergent branches.
  • 报错翻译
提示:您有不同的分支,需要指定如何协调它们。
提示:您可以通过在之前某个时间运行以下命令之一来做到这一点
提示:你的下一招:
提示:
提示: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
提示:调用。
fatal:需要指定如何协调不同的分支。

解决方法

问题分析:这是由于你拉取pull分支前,当前分支进行过merge合并更新分支操作,而其他人在你之前已经push过至少一个版本,导致版本号对应的时间戳有先后次序,在pull代码时会提示错误。

第一种解决方法:代码合并

  • 执行git config pull.rebase false
  • 默认将pull下来的代码与现有改动的代码进行合并
  • 但是可能会造成代码冲突,需要处理下这个问题,代码冲突如果2个人都改了同一个文件,需要联系之前push的同学,看看这块代码怎么保存

第二种解决方法:回退到合并之前的代码,再进行pull拉取最新代码

注意:这种解决方法仅适用于2个分支之间的合并(git merge)操作,比如你是将dev开发分支合并到test分支之前没pull,那这时候test分支需要回退到未合并前的版本。
test上合并上去的代码将会丢失,等你test分支能成功pull后,需要重新合并(merge)开发分支dev上的代码合并到test上。所以记得保留dev开发分支这个版本的代码再把test回退到上一个版本,等pull成功,再重新在test分支上合并dev分支代码

  • 查看最近3次提交的历史版本   
# git log -2

commit da0275b5cb8a090239768a7e0f3c29b136a485d2
Merge: 93e7e5e af72411
Author: aaa <aaa@xxx.com>
Date:   Thu Sep 7 05:34:14 2023 +0000

    Merge branch 'ts_kp_20230411' into 'test'

    
    minio上传图片接口    

    See merge request aits/data-intergration!10

commit af72411206738273c79b585270063dca88ccb67c (origin/test)
Author: aaa <aaa@xxx.com>
Date:   Thu Sep 7 10:32:02 2023 +0800

    minio上传图片不用获取url

   

  • 根据历史版本记录,选择commit地址,回退到自己合并之前的版本
git reset --hard da0275b5cb8a090239768a7e0f3c29b136a485d2
  • 再进行pull更新分支
git pull origin test
  • 最后再重新合并代码
git merge dev

将dev 分支合并到test分支,如果没有冲突直接提交,有冲突需要解决冲突再提交test 分支。

记得养成一个良好git发布流程的习惯

# 分支合并发布流程:
git add .			# 将所有新增、修改或删除的文件添加到暂存区
git commit -m "版本发布" # 将暂存区的文件发版
git status 			# 查看是否还有文件没有发布上去
git checkout test	# 切换到要合并的分支
git pull			# 在test 分支上拉取最新代码,避免冲突
git merge dev   	# 在test 分支上合并 dev 分支上的代码
git push			# 上传test分支代码

### 解决 Git 分支分歧错误提示 当遇到 `fatal: Need to specify how to reconcile divergent branches` 错误时,这通常是因为本地分支和远程分支之间的提交历史出现了分歧。这意味着两个分支都有不同的提交记录,Git 不知道应该优先采用哪一个版本的历史。 可以通过以下方法来解决这个问题: #### 方法一:使用 `--ours` 或 `--theirs` 参数强制更新 如果希望保留当前分支的更改并丢弃远程分支上的差异,可以执行以下命令: ```bash git pull --strategy=ours ``` 这条命令会告诉 Git 使用本地分支的内容作为最终结果[^1]。 相反,如果想完全接受远程分支的更改而忽略本地修改,则可运行: ```bash git fetch origin git reset --hard origin/branch_name ``` #### 方法二:手动合并冲突 另一种方式是通过标准流程尝试自动合并或者手工地处理可能存在的文件冲突。具体操作如下所示: ```bash git pull origin branch_name ``` 如果有任何无法自动解析的地方,Git 将暂停下来等待用户介入完成这些部分后再继续输入下面两条指令之一以结束整个过程。 ```bash git add . git commit -m "Merge after conflict resolution" ``` #### 方法三:重置到某个特定状态 有时候最简单有效的办法就是回到之前的一个已知良好状态下重新开始工作直到再次准备好推送新的改动为止;为此我们可以这样做: ```bash git fetch origin git checkout -b new_branch_name origin/branch_name ``` 以上三种策略可以根据实际情况灵活选用以便成功消除因分叉引起的问题同时保持项目进展顺利进行下去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值