- Git 入门
- Git - 首页
- Git - 版本控制
- Git - 基本概念
- Git - 命令行
- Git - 安装
- Git - 首次设置
- Git - 基本命令
- Git - 获取帮助
- Git - 工具
- Git - 速查表
- Git - 术语
- Git 分支
- Git - 简述分支
- Git - 创建新分支
- Git - 切换分支
- Git - 分支和合并
- Git - 合并冲突
- Git - 管理分支
- Git - 分支工作流程
- Git - 远程分支
- Git - 跟踪分支
- Git - 变基
- Git - 变基与合并
- Git - 合并提交
- Git 操作
- Git - 克隆操作
- Git - 打标签操作
- Git - 别名操作
- Git - 提交操作
- Git - 暂存操作
- Git - 移动操作
- Git - 重命名操作
- Git - 推送操作
- Git - 拉取操作
- Git - Fork 操作
- Git - 修补程序操作
- Git - 差异操作
- Git - 状态操作
- Git - 日志操作
- Git - HEAD 操作
- Git - origin master
- Git 撤销
- Git - 撤销更改
- Git - 检出
- Git - 恢复
- Git - 重置
- Git - 恢复操作
- Git - Rm
- Git - 切换操作
- Git - Cherry-pick
- Git - 修正
- Git 在服务器上
- Git - 本地协议
- Git - 智能 HTTP 协议
- Git - 哑 HTTP 协议
- Git - SSH 协议
- Git - Git 协议
- Git - 在服务器上获取 Git
- Git - 设置服务器
- Git - 守护进程
- Git - GitWeb
- Git - GitLab
- Git - 第三方托管选项
- 分布式 Git
- Git - 分布式工作流程
- Git - 为项目贡献代码
- Git - 维护项目
- 自定义 Git
- Git - 配置
- Git - 钩子
- Git - 属性
- Git - Init
- Git - Commit
Git - 合并冲突
在 Git 中合并分支
合并是将一个分支的更改集成到另一个分支的过程。在单独的分支上开发功能或修复错误后,通常会将该分支合并回主分支,以将这些更改包含在主代码库中。
处理合并冲突
分支合并并不总是按计划进行。如果 **auth-module** 分支和 **bugfix** 分支都对同一文件的同一部分进行了不同的编辑,则 Git 会遇到合并冲突。
这就是它的表现方式
$ git merge auth-module Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.
Git 报告 `index.html` 文件中的冲突并停止合并过程。
它等待我们手动解决冲突,通过编辑文件而不是自动创建新的合并提交。
我们可以使用 **git status** 查看哪些文件存在冲突
$ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") Unmerged paths: (use "git add..." to mark resolution) both modified: index.html no changes added to commit (use "git add" and/or "git commit -a")
当 Git 在合并期间发现冲突的更改时,它会将受影响的文件标记为未合并,并在文件中添加冲突标记以识别冲突的部分。
`index.html` 中的冲突部分可能如下所示
<<<<<<< HEAD:index.html <header> <h1>Welcome to our Website</h1> </header> ======= <header> <h1>Welcome to the Best Website</h1> </header> >>>>>>> feature/update-header:index.html
在上面的示例中
冲突表明 `index.html` 标题部分中的 <h1> 标签已被 feature/update-header 分支和 master 分支 (**HEAD**) 不一致地修改。
我们必须手动编辑文件以决定保留哪些更改以及如何合并它们,以解决此冲突。
例如,我们可以选择通过修改 `index.html` 以包含这两个概念来合并修改。
<header> <h1>Welcome to our Website</h1> </header>
在解决 `index.html` 中的冲突后,我们应该从文件中删除冲突标记 (**\\\<<<\, =======, 和 >>>>>>**)。
接下来,使用 **git add** 暂存文件并将其标记为已解决在 Git 中。
$ git add index.html
在所有冲突文件都已暂存后,接下来提交合并。
$ git commit
如果我们更愿意使用图形工具,可以使用 **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 会要求我们验证合并是否成功。
如果收到确认,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 'feature/auth-module' Conflicts: index.html # It seems like you're committing a merge. # If this isn't 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