Git常见问题记录:git出现“Your branch and ‘origin/master‘ have diverged”的解决方法【详细解释】

本文介绍了如何在Git中处理本地分支与master的冲突,包括无需保留本地修改的快速解决方法(gitfetchorigin,gitreset--hardorigin/master),以及保留本地修改的rebase方法(gitrebase,gitpull--rebase)。详细解释了gitpull--rebase过程中的冲突处理和提交步骤。


1、前言

说明您的本地子分支和master主分支已经分叉,有冲突产生!

2、最简单解决方法

如果不需要保留本地的修改,只要执行下面两步:

git fetch origin
git reset --hard origin/master

命令解析:
在这里插入图片描述

git fetch :命令用于从远程获取 master 主分支的最新代码库,并没有合并的操作;
git reset --hard :命令用于把本地分支代码,强制回退为 master 主分支的最新代码库,清空本地暂存区与工作区的所有修改。

3、保留本地修改的解决方法

3.1、使用如下命令:
git rebase origin/master
git pull --rebase

命令解析:
git rebase :顾名思义,就是重新定义(re)起点(base)的作用,命令用于把本地子分支变基到 master 主分支;
git pull --rebase :执行过程中会将本地当前分支里的每个提交 (commit) 取消掉,然后把将本地当前分支更新为最新的 master 主分支,其中:

git pull 的默认行为是 git fetch + git merge
git pull --rebasegit fetch + git rebase

3.2、执行完 git pull --rebase 之后如果有合并冲突,使用以下三种方式处理这些冲突:
git rebase --abort
git rebase --skip
git rebase --continue  合并冲突,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。

1、使用 git rebase --abort
执行之后,本地内容会回到提交之间的状态,也就是回到以前提交但没有 pull 时的状态,简单来说就是撤销 rebase 。
2、使用 git rebase --skip
git rebase --skip 引起冲突的commits会被丢弃,因此,在使用skip时请慎重。
3、使用 git rebase --continue
合并冲突,本地如果产生冲突,手动解决冲突之后,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。

3.3、最后如果要提交,就把内容 push 到远程仓库上:
git push origin master

谢谢点赞关注哈!

### 处理 Git rebase 编辑提交时分支与 origin/b/master 分歧 在 Git 的 rebase 过程中,如果当前分支与远程分支 `origin/b/master` 出现分歧,通常是因为远程分支已经更新,而本地分支的历史与远程分支不一致。这种情况可能导致 rebase 过程中出现冲突,或者在 rebase 完成后推送时失败。 在 rebase 编辑提交时,如果发现分支与 `origin/b/master` 存在分歧,可以采取以下方式处理: 1. **在 rebase 前确保本地分支与远程分支同步** 在执行 rebase 操作之前,应先拉取远程分支的最新提交以避免分歧。可以通过以下命令更新本地分支: ```bash git fetch origin ``` 然后再执行 rebase 操作: ```bash git rebase origin/b/master ``` 这样可以确保本地分支基于远程分支的最新提交进行变基,减少冲突的可能性[^1]。 2. **在 rebase 过程中处理分歧和冲突** 如果在 rebase 过程中遇到冲突,Git 会提示冲突文件并暂停 rebase。此时需要手动解决冲突,编辑文件并标记冲突已解决: ```bash git add <冲突文件> ``` 然后继续 rebase: ```bash git rebase --continue ``` 如果在 rebase 过程中发现本地分支与 `origin/b/master` 已经存在分歧,可以通过上述方式解决冲突并继续变基流程。 3. **使用 `git pull --rebase` 合并远程更改** 如果本地分支已经偏离了远程分支 `origin/b/master`,可以使用 `git pull --rebase` 命令将远程更改拉取并重新应用本地提交: ```bash git pull --rebase origin b/master ``` 该命令会将远程分支的更新拉取到本地,并将本地提交重新应用在其之上,保持提交历史的线性[^1]。 4. **强制推送本地更改(谨慎使用)** 如果 rebase 已经完成,并且确认本地分支的历史已经更新,可以使用强制推送将更改推送到远程分支: ```bash git push --force-with-lease origin b/master ``` 此操作会覆盖远程分支的历史,因此在多人协作的环境中应谨慎使用,以避免破坏其他人的工作。 5. **恢复原始状态以避免分歧** 如果在 rebase 过程中发现分歧难以解决,可以通过以下命令中止 rebase 并恢复到原始状态: ```bash git rebase --abort ``` 该命令会取消当前的 rebase 操作,并将分支恢复到 rebase 开始前的状态[^1]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹅编程笔记

你的鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值