Git提交代码发生冲突的场景与解决方案

问题

当我们在使用 Git 向远程仓库提交代码时,可能会遇到如下所述的错误提示:

To https://github.com/xxxxx/gitmerge.git! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/xxxxx/gitmerge.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

image-20230512095606622

这种情况出现的原因是当前本地分支的一些提交被其它开发者推送到了远程仓库,导致远程仓库的最新代码已经超过了当前本地分支的代码状态,因此在将本地代码推送到远程仓库时出现了冲突。此时需要手动合并远程仓库的最新代码并提交代码。

场景一

$ git pull

然后再 push 到远程仓库即可。

适用场景:冲突比较简单、容易解决,可以尝试使用 git pull 命令来合并最新代码,并进行必要的手动部分解决和合并操作。

举个例子:

我在 github 的远程仓库上创建了一个 README 文件,而我本地仓库中没有这个 README 文件,所以当我在本地没有这个 README 文件的基础之上在 push 的话,就会出现冲突。恰好我们又想在本地编辑一下 README 文件,这样其实可以直接使用git pull,因为冲突比较简单。

  1. 首先在 github 上创建一个远程仓库,并且在初始化仓库的时候选择不添加 README.md 文件,如果选择添加的话,github 会自动帮你创建一个分支。
  2. 然后在本地初始化一个仓库:
$ mkdir test_git_merge
$ cd test_git_merge
$ git init
$ echo "这是本地仓库" >> hello.txt
$ git add .
$ git commit -m "test"
$ git remote add origin https://github.com/<your_username>/<your_repo_name>.git
$ git push -u origin <your_branch>
  1. 在 github 上的远程仓库新建一个 README.md 文件,修改或添加一定的内容到 README.md 文件

image-20230513192539002

image-20230513192659775

  1. 此时我们在本地修改hello.txt, 然后尝试将其推送到远程
$ echo "修改本地仓库" >> hello.txt
$ git add .
$ git commit -m "test2"
$ git push

此时会出现文章开头时的错误, 我们直接使用以下命令:

$ git pull

我们会看到如下:

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 715 bytes | 102.00 KiB/s, done.
From https://github.com/xxxxx/testgitmerge2c6c00c..466227d  master     -> origin/master
Merge made by the 'ort' strategy.README.md | 3 +++1 file changed, 3 insertions(+)create mode 100644 README.md

此时我们会发现本地仓库中多了远程仓库中的 README.md 文件,然后我们执行:

$ git add .
$ git commit -m "test3"
$ git push

这次我们顺利的 push 了!

场景二

假设你在本地更新 hello.txt 文件,并将其推送到远程分支,并且在此期间,远程分支也发生了变化(如在 GitHub 上通过在线编辑在 hello.txt 文件中添加了一些内容)。此时你从远程分支 pull 代码将会产生冲突,需要手动解决冲突并进行代码合并。

以下是一个手动解决代码合并冲突的示例:

  1. 在远程分支上编辑了 hello.txt 文件,增加一个新行 “修改远程仓库”
这是本地仓库
修改本地仓库
修改远程仓库
  1. 推送远程修改

  2. 在本地编辑 hello.txt 文件,增加一个新行 “helloworld”

这是本地仓库
修改本地仓库
helloworld
  1. 提交并推送修改,将其应用到远程仓库
$ git add hello.txt
$ git commit -m "add helloworld to hello.txt"
$ git push

出现错误:

To https://github.com/xxxxx/testgitmerge.git! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/Xxxxxx/testgitmerge.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
  1. 然后,本地分支尝试 pull 远程仓库的修改,这时候 Git 将会自动合并尝试。发现 hello.txt 文件存在冲突,如下所示(原因是同一行中的内容不同):
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
  1. 打开 hello.txt. 文件,可以看到冲突的内容:
这是本地仓库
修改本地仓库
<<<<<<< HEAD
helloworld
=======
修改远程仓库
>>>>>>> 6963a862d66fed43ccd87dad21b0dae8b7105c0b

在这个示例中,Git 将本地和远程更改放在两个不同的区块中,中间分隔符 <<<<<<< HEAD======= 标记着来自两个源的冲突,本地更改在上方,远程更改在下方,之后远程更改的 ID 用 >>>>>>> 标识出来。

  1. 然后,可以手动审查并解决冲突,如删除一个 区块来保留所需代码,或使用编辑器等工具进行更高级的合并操作。在这种情况下,我们可以手动将两个内容合并到一起(删除对应的分隔符即可):
这是本地仓库
修改本地仓库
helloworld
修改远程仓库
  1. 手动解决后,使用 git add 命令添加文件。
$ git add hello.txt
  1. 最后,使用 git commit 命令提交更改,git push 推送到远程仓库即可。
$ git commit -m "Merge the hello.txt from remote and local"
$ git push origin master

通过以上步骤,你已经手动解决了冲突并合并了代码。需要注意的是,在手动解决代码冲突时,要进行谨慎操作,确保代码的质量和准确性。

场景三

多个开发者分别在不同的分支上修改同一个文件,然后尝试合并分支,由于分支之间的代码修改冲突,导致合并失败。

  1. 在 GitHub 上创建一个新的空仓库。

  2. 将该仓库克隆到本地,并在本地仓库上创建一个新分支。

$ git clone https://github.com/<your_github_username>/<your_repo>.git
$ cd <your_repo>
$ git checkout -b test
  1. 修改并提交文件,将本地分支 push 到远程仓库。
# 编辑文件
$ echo "line1" >> test.md
echo "line2" >> test.md# 添加修改后的文件
$ git add test.md# 提交修改
$ git commit -m "Add line1 and line2"# 向远程仓库推送本地分支
$ git push origin test
  1. 切换到另一个本地分支,并修改相同文件中的相同行代码。
# 切换到另一个分支
$ git checkout -b another_branch# 编辑 test.md
$ sed -i '' 's/line1/line11/' test.md# 添加修改后的文件
$ git add test.md# 提交修改
$ git commit -m "Change line1 to line11"
  1. 此时尝试使用 git pull 命令将远程分支的修改拉取到本地分支进行合并,即可触发合并冲突。例如,执行以下命令:
# 从远程仓库拉取最新的代码
$ git fetch origin# 在当前分支上将远程分支合并到本地分支
$ git merge origin/test

此时,由于两个分支都修改了 test.md 文件的同一行代码,Git 将无法自动合并这两个本地分支,会提示冲突,并让你解决这些冲突。你需要手动解决这些冲突,合并文件中的代码,然后提交更改并完成该操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/316865.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake入门教程【核心篇】编译类型Debug、Release、MinSizeRel、RelWithDebInfo

文章目录 1.说明1.1 Debug 配置1.2 Release 配置1.3 MinSizeRel 配置1.4 RelWithDebInfo 配置 2.提供的编译类型3.示例结论 1.说明 CMake作为一款强大的构建系统&#xff0c;提供了多种编译配置选项。这些配置影响编译过程中的优化级别和调试信息的包含情况。以下是CMake提供的…

成功的交易员是如何走向成熟的?

如果不能严格遵守纪律&#xff0c;你可能会犯下10000种错误&#xff1b;但是&#xff0c;如果你能够严格的遵守纪律&#xff0c;你就一个错误都犯不了。 本文为大家讲讲交易员进阶的五个阶段&#xff0c;希望大家能有所收获哦&#xff01;~ 一、掌握技术分析基础 当你刚开始接触…

第二证券:瑞玛精密盘中上演“天地板”走势

瑞玛精密3日开盘即涨停&#xff0c;随后快速跳水&#xff0c;盘中一度触及跌停&#xff0c;上演“天地板”走势。到发稿&#xff0c;该股迫临跌停&#xff0c;成交超4亿元&#xff0c;换手率达18%。此前&#xff0c;该股已接连3日涨停。 公司1日晚间在公告中指出&#xff0c;近…

综合场景搭建、在线分享,这款地理空间数据管理软件功能太多了!

《四维轻云》是一款轻量化的地理空间数据管理云平台&#xff0c;支持地理空间数据的在线管理、编辑及分享。平台具有项目管理、数据上传、场景搭建、发布分享、SDK开发等功能模块&#xff0c;支持多用户在线协作管理&#xff0c;实现了轻量化、便捷化的空间数据应用。 一、发布…

CRLF注入与检测

一、CRLF介绍 CRLF是CR和LF两个字符的拼接&#xff0c;它们 分别代表”回车换行”&#xff08;\r\n&#xff09;。十六进制编码分别为0x0d和0x0a&#xff0c;URL编码为%0D和%0A。CR和LF组合在一起即CRLF命令&#xff0c;它表示键盘上的"Enter"键&#xff0c;许多应用…

ArkTS - @Prop、@Link

一、作用 Prop 装饰器 和Link装饰器都是父组件向子组件传递参数&#xff0c;子组件接收父组件参数的时候用的&#xff0c;变量前边需要加上Prop或者Link装饰器即可。&#xff08;跟前端vue中父组件向子组件传递参数类似&#xff09; // 子组件 Component struct SonCom {Prop…

华为校招开奖,岗位职级薪资汇总(精华面经分享)

华为开奖 近期&#xff0c;不少同学都收到了来自 华为 的冬至礼物。 以目前形式来说&#xff0c;华为仍然属于优先考虑的企业。 我这里收集转发一下由牛客网统计到的各职位薪资情况&#xff1a; 统计表里面的薪资&#xff0c;有些写了具体金额&#xff0c;有些写的则是职级&…

如何在ArcGIS Pro中指定坐标系

在进行制图的时候&#xff0c;为了实现某些特定的效果&#xff0c;需要指定特定的坐标系&#xff0c;但是现有的数据可能不是所需要的坐标系&#xff0c;这时候就需要对现有的数据坐标系进行处理&#xff0c;这里为大家介绍一下ArcGIS Pro中指定坐标系的方法&#xff0c;希望能…

计算机毕业设计——基于SSM+Layui的图书管理系统(附源码)

1&#xff0c;项目背景 国家大力推进信息化建设的大背景下&#xff0c;城市网络基础设施和信息化应用水平得到了极大的提高和提高。特别是在经济发达的沿海地区&#xff0c;商业和服务业也比较发达&#xff0c;公众接受新事物的能力和消费水平也比较高。开展商贸流通产业的信息…

Flink-【时间语义、窗口、水位线】

1. 时间语义 1.1 事件时间&#xff1a;数据产生的事件&#xff08;机器时间&#xff09;&#xff1b; 1.2 处理时间&#xff1a;数据处理的时间&#xff08;系统时间&#xff09;。 &#x1f330;&#xff1a;可乐 可乐的生产日期 事件时间&#xff08;可乐产生的时间&…

【震撼低价】4G RTU 物联网采集控制网关仅需198元!现货包邮!机不可失,速来抢购!!!

今天&#xff0c;只有一件事情&#xff0c;那就是给大家送福利&#xff01; 今天&#xff0c;只有一件事情&#xff0c;那就是给大家送福利&#xff01; 钡铼技术官方旗舰店 给大家来一点清新脱俗的 推出线上感恩回馈活动 为您送上超值福利 享受最低4折优惠 这个“双十一…

Dockerfile与DockerCompose

Docker的Image结构是怎样的&#xff1f; 镜像是将应用程序 及其需要的 系统函数库、环境、配置、依赖 打包而成。 镜像结构 入口&#xff08; Entrypoint &#xff09; 镜像运行入口&#xff0c;一般是程序启动的脚本和参数 层&#xff08; Layer &#xff09; 在BaseImage基…