解决git合并的冲突问题

这篇具有很好参考价值的文章主要介绍了解决git合并的冲突问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.实验问题:多人协作下的合并冲突问题

1.1 实验一

实验目的:

模拟某些情况下使用git pull下拉远程仓库代码时覆盖了自己已有代码

实验步骤:

  1. 使用git clone拷贝远程仓库到本地

  2. 使用git reset --hard把本地仓库工作区,版本库都回退到很久之前的版本

  3. 使用git pull下拉远程仓库最新分支,观察本地仓库代码变化

实验结果:

本地仓库的所有代码都被完全替代成远程仓库的最新版本

实验分析:

在git pull拉下之后远程仓库分支之后,对应了之前总结的git merge的fast forward模式,因为本地仓库分支和远程仓库分支不分叉,因此进行了fast forward模式合并

1.2 实验二

实验目的:

模拟某些情况下,多人共同开发相同文件,在git pull时发生的冲突

实验步骤:

  • 工作者一
    1. 给工作者一创建一个文件夹,表示工作者一的工作区
    2. 使用git clone把远程仓库拷贝到工作区
    3. 在工作区对项目中的文件X做出修改
    4. 打开windows的凭据管理器,修改已保存的登录凭据(此处以gitee为例,修改gitee的登录凭据即可),修改为工作者一的用户名和密码
    5. 使用git add .和git commit -m和git push将最新分支提交到远程仓库
  • 工作者二
    1. 给工作者二创建一个文件夹,表示工作者二的工作区
    2. 使用git clone把远程仓库拷贝到工作区
    3. 在工作区对项目中的文件X做出修改
    4. 打开windows的凭据管理器,修改已保存的登录凭据,修改为工作者二的用户名和密码
    5. 使用git pull拉下最新分支,观察结果
    6. 使用git add .和git commit -m和git push将本地分支提交到远程仓库,观察结果
    7. 使用git pull来下最新分支,观察结果
    8. 使用git reset --merge撤销git pull导致的合并
    9. 修改冲突位置的代码,可以选择在文件中手动修改:同时保留远程仓库和本地仓库的代码。可以选择IDE修改:可以选择留下任何内容(推荐使用专业IDE例如VSCODE,会有merge editor,可以直接指定merge合并结果。否则需要手动输入其它git 指令来合并)
    10. 使用git add .和git commit -m和git push将本地分支提交到远程仓库,观察结果

实验结果:

  1. 显示git pull失败,提示需要git stash或git commit
  2. 显示git push失败,提示当前仓库版本低于远程仓库版本并有分叉
  3. 显示文件X处产生git merge冲突
  4. 显示上传远程仓库成功

实验分析:

  1. git merge时如果工作区有修改,那么不会进行
  2. git push失败是因为明本地仓库版本落后于远程仓库,并且出现了分叉,这样才会被拒绝
  3. git merge失败是因为两个人都对X文件修改,不清楚保留哪一个修改
  4. 当前仓库分支合并后版本高于远程仓库版本,上传成功

2.实战问题:单人导致的合并冲突问题

2.1 同一分支下单人导致的合并冲突问题

引入:提升切换分支的速度

正在最新的还没有上线的分支修改文件,但是老的已经上线的分支上出现了错误,需要切换分支修改。而当前分支修改的文件很多,功能没有开发完全,因此有很多eslint问题导致不能直接提交并发送到远程仓库。

老的解决方案:

想要快速切换分支,不想一个个把功能没开发完导致的eslint警告给修改掉。就从远程仓库clone了多份一样的仓库到本地。然后修改时不切换分支,直接在另一个clone的项目文件上修改。

产生的问题:

这通常来讲没有问题。因为修改的老分支上的老代码一般当前版本不再修改,一般不会有冲突。但是有时候可能在clone的项目1上修改了当前分支的文件并提交,过了一段时间忘记了自己在clone的哪个分支上提交文件了,你可能打开了clone的项目2。这时你必须git pull拉取最新代码,但实际上可能会忘记这个操作。原因是文件都是由自己修改,当前本地仓库版本一定大于等于远程仓库,不需要git pull。但是clone多份项目下来,会有本地仓库版本小于等于远程仓库的情况,这需要我们关注更多的版本细节。因此这种解决方案不是一种好主意。

2.2 不同分支下单人导致的合并冲突问题

引入:修改已上线分支的问题

在最新未上线的分支(例如7.1.50)中进行开发时,上一个版本的老分支(例如7.1.40)出现的问题需要修改。此时需要切换分支修改。但是有时候改完之后,忘记切回最新分支了,然后继续在老分支上开发最新的功能并提交,当你发现时你的同事已经进行了若干次提交,如果你进行回滚,就会丢失同事的修改。此时选择继续在最新分支上进行开发。当老版本分支进入稳定版本后,会把老版本分支和当前分支进行合并。此时就会出现问题,同一份文件都是自己修改,但是无法直接合并,因为将分支的提交记录看作树,那么你自己修改的文件在7.1.40和7.1.50中不存在祖先孩子关系,无法直接合并,这样就造成了冲突。

解决方案:

很简单,直接选择合并的内容即可

3.总结

解决冲突的最好方案是:

  • git pull之后手动修改:

    • 只保留远程仓库的代码,剪切你的修改,等到合并成功后再对文件进行修改并重新提交
    • 同时保留远程仓库的代码和你的代码,合并可以成功
    • 使用IDE提供的merge editor,可以选择性保留任意内容
  • git pull之前修改:

    1. 只保证工作区做出了修改,如果提交到了版本库,那么使用git reset撤销提交。

    2. 之后使用git stash将工作区修改缓存进栈。

    3. 之后git pull下拉代码,直接进行fast forward合并。

    4. 再进行git stash pop出栈,自动发生git merge合并,此时你还需要遵循上述方案选择如何merge合并。

  • 项目开发时的规范:文章来源地址https://www.toymoban.com/news/detail-468032.html

    • 不要fork或clone多份远程仓库到本地,保证本地仓库只有一个。当切换分支时,先处理当前修改的提交。
    • 每次开发时应先检查当前分支版本。每次提交时应先检查分支版本。避免把代码提交到错误分支。

到了这里,关于解决git合并的冲突问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解Git合并冲突——问题重现、原因及解决 “Automatic merge failed; fix conflicts and then commit the result.“

    最后更新日期:2022/10/6 在Git中使用 git merge 命令合并两个分支的时候,有可能产生这种情况: 这就是发生了 冲突 (conflict)。 为什么会有冲突?要如何解决呢?请看下文介绍。 简单来说,就是两个分支都对同一个文件做了更改,当这两个分支合并的时候,Git不知道要采用哪

    2024年02月14日
    浏览(53)
  • git 分支合并冲突解决

    已经累到不想说话了,直接上流程吧! 1、比如你想A分支合并到B分支,先把这两分支都pull一下最新代码:git pull 2、切换到要合并的分支:git checkout tougu_pan (tougu_pan 是我的B分支) 3、在 tougu_pan 分支上执行 git merge --no-ff dev 4、git status 查看本地修改,就会出现以下状态 5、如

    2024年02月10日
    浏览(41)
  • Git--多人协作开发

    目前,我们所完成的工作如下 : 基本完成Git的所有本地库的相关操作,git基本操作,分支理解,版本回退,冲突解决等等 申请码云账号,将远端信息clone到本地,以及推送和拉取 正文开始!!! 是时候干最重要的一件事情了,实现多人协作开发!为了这件事情,我们需要先做一些准备工作.我们

    2024年02月09日
    浏览(34)
  • Git 多人协作开发

    任务名称: 任务描述: 任务优先级:1(1最优先) 周期:10ms和1ms README.md为markdown语言编写的文件,可使用 typora 软件进行读写。 版本 时间 更新说明 修订者 V0.1 2023/10/27 base版本 在主库已经存在的情况下,日常操作流程如下: Git 全局设置

    2024年04月10日
    浏览(30)
  • Git分支——多人协作开发

    Git分支可以将主线任务(项目)分为若干个分支,一个或若干个人操控一个分支,在同一时间点各司其职,完成相对应的工作,各分支完成之后总汇在主线任务上,在最短的时间内完成项目需求,实现多人协作开发 多人协作开发不仅仅节省时间,还能防止互相干扰,每一个具

    2023年04月08日
    浏览(27)
  • git代码合并、git解决冲突的方法?

    Git是一种分布式版本控制系统,它提供了多种方法来合并代码和解决冲突。下面是两个常见的场景以及对应的操作步骤: 合并分支 当我们在一个项目中有多个分支时,需要将不同分支中的代码合并到一起。假设我们有一个主分支master和一个开发分支dev,现在需要将dev分支合

    2024年02月02日
    浏览(32)
  • git使用常见问题(提交代码,合并冲突)

    git fetch 获取远程分支更新 git branch 查看本地分支 git branch -r 查看远程分支 git branch -a 查看所有分支(本地分支和远程分支) git clone 地址 克隆代码 git checkout 切换分支 git pull 同步到本地(拉) git push 推送至服务器 git checkout -b dev origin/master 基于主分支创建dev分支 git add . 添加

    2024年02月03日
    浏览(30)
  • 【Git原理与使用】-- 多人协作

    目录 多人协作一(多人同一分支) 开发者一(Linux) 开发者二(Windous) master合并 远端上的合并 本地上的合并 总结 多人协作一(多人多分支) 开发者一(Linux) 开发者二(Windous) master合并 合并function-2 合并function-1 远程分支删除后,本地 git branch -a 依然能看到的解决办法

    2024年02月08日
    浏览(28)
  • Git合并多分支及冲突解决

    工作场景 工作场景中我们常常会遇到以下情况: 小明:靓仔/妹,我上线那天有事情,我的那个分支你帮我一起推一下 摸鱼崽:帮我也合一下,好哥哥 我:好(你)呀(md) 如果在这种时候你说我不会,我只会add,commit、push我本地的,你的分支我哪儿会啊,是不是有点尴尬

    2024年02月13日
    浏览(40)
  • 【Git】分支合并&冲突产生与解决

    文章学习自:麦兜搞IT,如有侵权,告知删除 合并操作在Git中属于最为核心的一个操作,包括三种合并方式:一种为fast forward ,需要满足有非常强的前提条件才能执行;一种为3 way merge方式,这种是我们工作中常见的;最后一种为变基rebase。另外,本篇文章也会深入讲解冲突

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包