Git实战技巧-比较不同分支之间的差异和代码的改动

1、企业场景

播仔即将结束在传智公司的开发工作,跳槽到黑马公司。项目经理考虑到播仔即将离职,只分配了一个简单的账户密码登录功能,而其他方式的登录功能让小黑去开发了。

项目经理为了保障播仔在离职前能完成开发工作,开始催促播仔工作进度:

java代码对比git不同分支代码差异 git代码比较_java代码对比git不同分支代码差异


播仔在找到小黑开发的代码分支后,开始合并代码:

java代码对比git不同分支代码差异 git代码比较_github_02


此时:出现代码冲突问题

java代码对比git不同分支代码差异 git代码比较_github_03


播仔懵了,怎么代码冲突了呢?

2、问题分析

为什么播仔在合并代码时,会出现代码冲突呢?

java代码对比git不同分支代码差异 git代码比较_远程仓库_04

两位程序员(播仔、小黑)在各自分支下开发的功能,会涉及到一些相同的类。两位程序员都有针对相同的类中代码进行修改

java代码对比git不同分支代码差异 git代码比较_git_05


在合并时,由于相同的类中代码有差异化,所以出现代码冲突

java代码对比git不同分支代码差异 git代码比较_github_06

3、解决思路

3.1)使用Idea工具解决:

  1. 对比不同分支代码的差异化
  2. 把不同分支中有效代码进行保留,并合并成最终代码
  3. 向Git提交合并后的代码

3.2)使用Git命令行解决:

  1. 明确合并时哪些文件发生冲突
  2. 查看冲突文件内容,分析冲突代码
  3. 修改冲突文件(合并代码)
  4. 提交修改后的冲突文件
  5. 推送到Git远程仓库

4、动手实践

4.1)使用Idea工具解决

对比不同分支代码的差异化

  • 选择有代码冲突的类后,进行Merge(合并)

java代码对比git不同分支代码差异 git代码比较_java代码对比git不同分支代码差异_07


java代码对比git不同分支代码差异 git代码比较_git_08


把不同分支中有效代码进行保留,并合并成最终代码

  • 在不同分支上,选择要保留的代码到Result(最终代码)

java代码对比git不同分支代码差异 git代码比较_github_09


java代码对比git不同分支代码差异 git代码比较_远程仓库_10


合并完成后的代码:

java代码对比git不同分支代码差异 git代码比较_github_11


向Git提交合并后的代码

java代码对比git不同分支代码差异 git代码比较_差异化_12

4.2)使用Git命令行解决

明确合并时哪些文件发生冲突 (当前分支为dev1)

  • 执行命令:git merge 分支名 有冲突时会提示哪些文件有冲突
  • 代码冲突:会停留在MERGING状态

java代码对比git不同分支代码差异 git代码比较_差异化_13


查看冲突文件内容,分析冲突代码

  • 执行命令:cat 冲突文件

java代码对比git不同分支代码差异 git代码比较_git_14

java代码对比git不同分支代码差异 git代码比较_git_15


修改冲突文件(合并代码)

  • 执行命令:vim 冲突文件

java代码对比git不同分支代码差异 git代码比较_git_16

java代码对比git不同分支代码差异 git代码比较_github_17

通过vi编辑器,删除冲突文件中不需的内容后:

java代码对比git不同分支代码差异 git代码比较_github_18

java代码对比git不同分支代码差异 git代码比较_差异化_19

提交修改后的冲突文件

  • 执行命令:git add 修改后的冲突文件 先添加到暂存区
  • 执行命令:git commit -m '消息' 再提交到本地Git

java代码对比git不同分支代码差异 git代码比较_java代码对比git不同分支代码差异_20


推送到Git远程仓库

  • 执行命令:git push

java代码对比git不同分支代码差异 git代码比较_git_21

5、问题小结

在团队开发中,经常会遇到代码冲突的问题。
原因:多人对相同的类进行了开发维护,造成代码存在差异化
解决方案:

  1. 使用工具或git命令对比不同分支代码的差异化
  2. 把不同分支中有效代码进行保留,合并成最终代码
  3. 提交合并后的最终代码