Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[工具推荐+Bug Note] 关于 git merge 代码冲突不得不说的问题 #24

Open
PeterChen1997 opened this issue Jul 8, 2021 · 0 comments
Labels
bug Something isn't working 工具推荐

Comments

@PeterChen1997
Copy link
Owner

PeterChen1997 commented Jul 8, 2021

背景

git merge 的过程中,代码冲突往往是不可避免的,项目越大,人越多,冲突越多

这里先说下两种 git 的代码合并模式,一种是快速合并 fast-forward,一种是三方合并,提示冲突的是后面这种

image

自己在使用 VSCode 的时候就遇到过以下问题:

  • 这段代码,是合并 current 的代码还是 incoming 的(包括这两个概念也很难理解)
  • 为什么代码合并提交后,其他同学的部分代码神奇消失了,从导致了线上问题
  • ...

最近就发现了一个真实的线上 Bug:代码拆分解耦后上线,部分代码神秘丢失了,导致线上功能展示异常,还好问题不是很大...

原因

原因就在于 VSCode 并不支持 git merge 的三路合并,合并代码的时候,只能看到自己的代码和此分支原有的最新代码,我的拆分 commit,和第二个 commit 在原分支上的功能新增 commit 冲突了,由于代码量较大,并没有发现新增代码的痕迹,漏掉了相关功能的迁移,从而导致了此问题...

从图一来看,就是三方合并中,C4 和 C2 都改了同一个文件,但是提示 conflict 的时候只能看到 C4 和 C2 的 diff,看不到原始文件 C6,导致 C2 的新增功能被忽略了

复现

下面是一个代码 merge 冲突的 demo,具体可以看这个 项目,很容易就可以复现 conflict 场景

image

如果能启用三路合并,上面的问题能够大大缓解,VSCode 官方的 issues 也有人反馈 (),但是迟迟得不到支持...

抢救

等不来官方,只能自己抢救一下了,这里记录下 VSCode 支持三路合并的两个方案:

方案一

  • 安装 sublime merge app
  • 安装 VSCode 插件 Sublime Merge for VSCode
  • 合并遇到冲突后在文件中右键打开 Sublime Merge
  • 点击冲突文件的 resolve,可以进入三路合并

image

方案二

  • 安装 webstorm
  • (必须)随便打开一个项目
  • (首次必选)点击顶部 菜单 > 工具 > 注册命令行命令(避免出现 webstorm not found)
  • (可选)配置 git config,方便下次使用
[mergetool "webstorm"]
    cmd = webstorm merge $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE") $(cd $(dirname "$BASE") && pwd)/$(basename "$BASE") $(cd $(dirname "$MERGED") && pwd)/$(basename "$MERGED")
    trustExitCode = true
[merge]
    tool = webstorm
  • 遇到项目冲突后,项目根目录运行 git mergetool,进入 webstorm 进行三路合并

image

@PeterChen1997 PeterChen1997 added bug Something isn't working 工具推荐 labels Jul 8, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working 工具推荐
Projects
None yet
Development

No branches or pull requests

1 participant