当前位置:首页 > 开发工具 > git分支合并冲突

git分支合并冲突

2022年09月16日 16:59:13开发工具8

合并冲突

如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。 如果你对 #53 问题的修改和有关 hotfix 的修改都涉及到同一个文件的同一处,在合并它们的时候就会产生合并冲突:

$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

此时 Git 做了合并,但是没有自动地创建一个新的合并提交。 Git 会暂停下来,等待你去解决合并产生的冲突。 你可以在合并冲突后的任意时刻使用 git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件:

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

    both modified:      index.html

no changes added to commit (use "git add" and/or "git commit -a")

任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。 出现冲突的文件会包含一些特殊区段,看起来像下面这个样子:

  1.  
    <<<<<<< HEAD:index.html
  2.  
    < div id="footer">contact : email.support@github.com</div>
  3.  
    =======
  4.  
    <div id="footer">
  5.  
    please contact us at support@github.com
  6.  
    </div>
  7.  
    >>>>>>> iss53:index.html

这表示 HEAD 所指示的版本(也就是你的 master 分支所在的位置,因为你在运行 merge 命令的时候已经检出到了这个分支)在这个区段的上半部分(======= 的上半部分),而 iss53 分支所指示的版本在======= 的下半部分。 为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个,或者你也可以自行合并这些内容。 例如,你可以通过把这段内容换成下面的样子来解决冲突:

  1.  
    <div id="footer">
  2.  
    please contact us at email.support@github.com
  3.  
    </div>

上述的冲突解决方案仅保留了其中一个分支的修改,并且 <<<<<<< , ======= , 和 >>>>>>> 这些行被完全删除了。 在你解决了所有文件里的冲突之后,对每个文件使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。

如果你想使用图形化工具来解决冲突,你可以运行 git mergetool,该命令会为你启动一个合适的可视化合并工具,并带领你一步一步解决这些冲突:

$ git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html

Normal merge conflict for 'index.html':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (opendiff):

如果你想使用除默认工具(在这里 Git 使用 opendiff 做为默认的合并工具,因为作者在 Mac 上运行该程序)外的其他合并工具,你可以在 “下列工具中(one of the following tools)” 这句后面看到所有支持的合并工具。 然后输入你喜欢的工具名字就可以了。

Note

如果你需要更加高级的工具来解决复杂的合并冲突,我们会在 高级合并 介绍更多关于分支合并的内容。

等你退出合并工具之后,Git 会询问刚才的合并是否成功。 如果你回答是,Git 会暂存那些文件以表明冲突已解决: 你可以再次运行 git status 来确认所有的合并冲突都已被解决:

$ git status
On branch master
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:

    modified:   index.html

如果你对结果感到满意,并且确定之前有冲突的的文件都已经暂存了,这时你可以输入 git commit 来完成合并提交。 默认情况下提交信息看起来像下面这个样子:

Merge branch 'iss53'

Conflicts:
    index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#	.git/MERGE_HEAD
# and try again.


# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# All conflicts fixed but you are still merging.
#
# Changes to be committed:
#	modified:   index.html
#

作者:多加些蜂蜜
来源链接:https://www.cnblogs.com/NotEnough/p/9448978.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/tool/42070.html

标签: Git合并
分享给朋友:

“git分支合并冲突” 的相关文章

Git 管理工具 SourceTree 的使用(上手简单,不熟悉git命令的开发者必用)

Git 管理工具 SourceTree 的使用(上手简单,不熟悉git命令的开发者必用)

目录 一、SourceTree 概述 二、SourceTree 使用方法 1. 克隆 Git 仓库至本地 2. 推送本地的文件至远程仓库 3. 创建/切换/合并分支 4. 版本回退 一、SourceTree 概述 &...

成功解决|解决 git 拉取失败 报 unable to update local ref

成功解决|解决 git 拉取失败 报 unable to update local ref

三行命令解决 切到项目根目录: 1.git gc --prune=now 2.git remote prune origin 3.git pull 结束 福利大放送 关注微信公众号“AI码师”,领取面试资料和最新全套微服务教程...

git远程仓库管理

远程仓库管理 修改仓库名 一般来讲,默认情况下,在执行clone或者其他操作时,仓库名都是 origin 如果说我们想给他改改名字,比如我不喜欢origin这个名字,想改为 jianguo 那么就要在仓库目录下执行命令: git remote re...

Mac下修改git用户名,邮箱

https://blog.csdn.net/helinlin007/article/details/52266169 首先进入vi ~/.gitconfig进入对应txt 文件,在里面 修改即可 作者:小贞贞 来源链接:https://blog.csdn.net...

git pull origin

git pull origin <分支名>把远程分支拉取回来到本地,同时把本地代码和远程更新到一致。 作者:zhangphil 来源链接:https://blog.csdn.net/zhangphil/article/details/801...

git format-patch 使用方法

使用git format-patch生成所需要的patch: # git format-patch -s 1bbe3c8c197a35f79bfddaba099270a2e54ea9c7 please replace the hash code with your...

如何将idea项目上传到Git

如何将idea项目上传到Git

Git是一款免费的分布式版本控制工具。每个人的电脑都是一个完整的版本库,那么我们该如何将一个java项目上传到Git呢? 一、准备工作 1、Git下载及安装 https://jingyan.baidu.com/article/7f766dafba84f04101...

Git回滚到上一次提交的节点

Git回滚到上一次提交的节点

有这样的情况,在代码提交完成之后, 发现出了问题,需要回滚到上一次提交的节点,怎么做呢。 首先找到git提交的日志 git log 找到最近一次提交,复制提交的信息码,如图: 复制该信息码,然后控制台revert一下,就OK...

git拉取项目

git拉取项目

在有些时候,我们往往从github或者gitlab或者coding上面直接下载项目下来运行,但是这种情况往往没有使用git远程拉取来的安全(或者叫装逼), 所以这里我以gitLab为例子,说一下如何将远程服务器上的代码拉取到本地   首先,你得安装好g...

git清空本地缓存

清除本地缓存提交 git rm -r --cached . git add . git commit -m 'delete' git push -u origin master -f    //强制提交 作者:挥墨染千秋 来源链接:ht...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。