Git分支合并冲突解决的方法实现

前2天群里发了张git历史图,如下:

根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文章。

根据项目上的需求,如果要求git提交历史是比较简单的一条时间线,可以使用rebase的合并;如果没有这个要求,可以使用merge合并,其分支树是网状结构,但每个提交也都是比较明确清晰的。他们的区别,可参考git merge与 git rebase区别及实例:

  • rebase合并:本质是先取消自己的提交,临时保存,然后把当前分支更新到最新的origin分支,最后应用自己的提交。
  • merge合并:将两个分支进行合并提交。

rebase合并

(1)远程fetch的代码,本地没有修改,直接rebase即可;

(2)若本地对文件修改,没有add,rebase时,会提示“Cannot rebase: You have unstaged changes.Please commit or stash them.”,add后没有commit,会提示“Cannot rebase: Your index contains uncommitted changes.Please commit or stash them.”。commit后,如果没有修改同一文件,rebase不会冲突。

(3)若本地对同一个文件修改,commit后,rebase时,有2种情况:

    ① 如果没有修改同一位置,则可以rebase,不会产生冲突;

    ②如果修改了同一处,则rebase时会出现冲突,也不用怕,此时git已经进行了合并,只是没有应用自己的提交,解决办法:修改冲突的文件,然后执行add和rebase --continue操作即可。如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态,如何解决,后续再补充。

merge合并

merge合并也可能存在冲突,解决冲突与rebase相似,处理完冲突文件后,重新提交即可。

举例说明

假设现在有3个人(git1、git2、git3)合作开发一个项目。

(1)git1创建项目,添加index.html文件,在index文件中添加“create by git1”,提交;

git2拉取文件后,在index中添加“add by git2”,提交;

git3拉取文件后,在index中添加“add by git3”,提交;

git1拉取最新代码后,在index中添加“add by git1 add1 by git1”,如下:

提交远程仓库,分支树如下:

(2)git2在index文件中添加“add 1 by git2”,以实验冲突

  此时分支树如下:

  提交后:

  然后执行rebase发生冲突:

  分支树为(此时分支为(no branch, rebasing dev)):

  打开冲突文件,冲突部分是以 <<<<<<<<<< ============= >>>>>>>>>>标识,将此部分代码进行处理,处理后的文件为:

  执行add和rebase --continue

  rebase结束,分支树为:

  提交远程后,最终分支树如下:

(3)git3的index文件如下:

将index文件中的第一行修改为“create by git1 modifed in another place”,提交。

从远程拉取最新文件,执行rebase

最终结果如下:

(4)git1创建了一个index2.html文件,提交后push,远程拒绝push,原因是本地不是最新版本,需要更新后提交,拉取最新文件。

  git1执行merge操作,最终分支树如下:

总结修改同文件不同处,rebase和merge合并不会冲突修改同文件同一处,合并会冲突,解决方式:rebase,解决冲突,执行add+rebase continue;merge,解决冲突,重新提交

到此这篇关于Git分支合并冲突解决的方法实现的文章就介绍到这了,更多相关Git分支合并冲突解决内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解git合并冲突解决方法

    1.git merge冲突了,根据提示找到冲突的文件,解决冲突 如果文件有冲突,那么会有类似的标记 2.修改完之后,执行git add 冲突文件名 3.git commit 注意:没有-m选项 进去类似于vim的操作界面,把conflict相关的行删除掉 4.直接push就可以了,因为刚刚已经执行过相关merge操作了 相关的操作如下 冲突产生 [root@Monitor Demo]# git branch #当前在master分支下 * master psr/psr-01 psr/psr-02

  • Git分支合并冲突解决的方法实现

    前2天群里发了张git历史图,如下: 根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文章. 根据项目上的需求,如果要求git提交历史是比较简单的一条时间线,可以使用rebase的合并:如果没有这个要求,可以使用merge合并,其分支树是网状结构,但每个提交也都是比较明确清晰的.他们的区别,可参考git merge与 git rebase区别及实例: rebase合并:本质是先取消自己的提交,临时保存,然后把当前分支更新到最新的origin分

  • git可视化工具Sourcetree使用全攻略(git冲突解决)

    目录 导入仓库 更新版本操作 修改 拉取 提交 分支操作 远程分支与本地分支 切换分支 贮藏 删除分支 获取远程分支 创建新分支 合并分支内容 冲突 合并冲突 未拉取便提交冲突 拉取代码与本地修改代码有冲突 撤销合并操作 尾言 导入仓库 首先我们需要知道自己的仓库如何拉取到本地. 这里以码云为例,找到对应的源路径/URL: 复制,然后来到Sourcetree: 更新版本操作 修改 当你本地代码发生改变时,会出现未暂存文件: 拉取 当别人更新了代码,而你本地没有拉取,拉取会亮起,可以点击拉取别人代

  • git在idea中的冲突解决方法(非常重要)

    1.git冲突的场景 情景一:多个分支代码合并到一个分支时: 情景二:多个分支向同一个远端分支推送代码时: 实际上,push操作即是将本地代码merge到远端库分支上. 关于push和pull其实就分别是用本地分支合并到远程分支 和 将远程分支合并到本地分支 所以这两个过程中也可能存在冲突.git的合并中产生冲突的具体情况: <1>两个分支中修改了同一个文件(不管什么地方) <2>两个分支中修改了同一个文件的名称 两个分支中分别修改了不同文件中的部分,不会产生冲突,可以直接将两部分

  • 详解git的分支与合并的两种方法

    如何将两个分支合并到一起.就是说我们新建一个分支,在其上开发某个新功能,开发完成后再合并回主线. 1.   git merge 咱们先来看一下第一种方法 -- git merge 在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点.翻译成自然语言相当于:"我要把这两个父节点本身及它们所有的祖先都包含进来."下面具体解释. # 创建新分支 bugFix git branch bugFix # 切换到该分支 git checkout bugFix # 提交一次 git c

  • Python pycharm提交代码遇到冲突解决方法

    目录 一.背景 二.冲突产生原因 三.解决方法 3.1 pycharm误删代码怎么处理 3.2 解决pull --rebase代码冲突 3.3 备份代码 四.重点注意事项 一.背景 我在pycharm提交代码的时候,因为对git和pycharm不是很熟悉,在提交代码到远程仓库遇到冲突后选择应用远端代码导致把本地代码全部删除.之后不知道代码恢复方法,又把代码重新写了一遍,非常浪费时间,导致开发效率低下. 这个问题的相关解决方法在网上比较零碎也不详细,下面我通过自己的实践一步步说明如何解决这个问题.

  • 浅析Git 分支的新建与合并

    分支的新建与合并 现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流程: 开发某个网站. 为实现某个新的需求,创建一个分支. 在这个分支上开展工作. 假设此时,你突然接到一个电话说有个很严重的问题需要紧急修补,那么可以按照下面的方式处理: 返回到原先已经发布到生产服务器上的分支. 为这次紧急修补建立一个新分支,并在其中修复问题. 通过测试后,回到生产服务器所在的分支,将修补分支合并进来,然后再推送到生产服务器上. 切换到之前实现新需求的分支,继续工作. 分支的新建与切换

  • 在 Shell 提示符中显示 Git 分支名称的方法

    Git 的好处之一就是把代码的分支管理变成了一件极其便捷的事情,分支只保留差异,不用复制任何文件,不用连接网络,快速创建,用完即删.Git 分支与项目的复杂程度无关,不管你的项目多么复杂,创建 Git 分支永远都是瞬间的事情.同时,因为保留了父类分支的信息,所以分支的合并也变得异常简单. 当在一个项目中频繁使用多个分支时,可以使用 git status 命令查询自己现在正工作在哪个分支下面,不过难免有脑子发昏的时候,忘记自己在哪个分支下面,因而发生误操作之类的杯具. 那么把分支显示在 Shell

  • git pull时冲突的几种解决方式(小结)

    仅结合本人使用场景,方法可能不是最优的 1. 忽略本地修改,强制拉取远程到本地 主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉 git fetch --all git reset --hard origin/dev git pull 关于commit和pull的先后顺序,commit-->pull-->push 和 pull-->commit-->push的顺序,两种情况都遇到过代码冲突.解决方法如下: 2. 未commit先pull,

  • IDEA怎么切换Git分支的实现方法

    情景描述 在项目开发过程中,不同项目阶段可能会有不同的分支,当创建好一个分支后,就需要将代码切换到这个分支上进行代码同步,例如将当前 origin/master -> origin/dev分支,IDEA没有自动同步的功能,会找不到目标分支,这时候就需要先Fetch一下,详细步骤往下看.(如果Git下能看到目标分支,直接Checkout As即可) 解决方法 1. 将远程主机的最新内容拉到本地 右键项目 -> Git -> Repository -> Fetch 2. 检查一下本地是

随机推荐