多人协作开发使用版本控制难免会有冲突,在前端使用 VSCode 和 Git 过程中,就会遇到大大小小的冲突,有的 merge 一下,然后提交推送就可解决,有的是因为 HEAD 指针混乱造成,本地和远程分支拉取 / 合并问题。
出现这种情况的原因是,A、B 两个人同时操作了一个版本(HEAD)文件,工具不知道选择哪一个,这样就会报冲突。
↓———————————————————————————------————————↓
使用当前 | 使用传入 |
current program
<<<<<<
b789=======
b45678910
>>>>>>>6853e5ff961e684d3a6c02d4d06183b5ff330dcc
incoming program
↑——————————————————————————————————————————————↑
出现以下冲突页面后,在冲突代码上会有使用当前代码还是使用传入代码的选项,分析代码,选择留下有用的代码即可。
本地创建的分支或与远程分支失联的分支,pull 代码或者提交代码就会报以下错误:
↓————————————————————————————————————↓
- You asked me to pull without telling me which branch you
- want to merge with, and 'branch.production.merge' in
- your configuration file does not tell me, either. Please
- specify which branch you want to use on the command line and
- try again (e.g. 'git pull ').
- See git-pull(1) for details.
- If you often merge with the same branch, you may want to
- use something like the following in your configuration file:
- [branch "debug"]
- remote =
- merge =
- [remote ""]
- url =
- fetch =
- See git-config(1) for details.
↑————————————————————————————————————↑
本地分支和远程分支没有关联的解决方法就是使用 --set --upstream 跟踪远程分支即可。
我本地分支是 local_branch 远程分支是 origin/local_branch
在终端使用以下命令:
git branch --set --upstream origin/local_branch local_branch
正确的标识就是在左下角由云图标变成循环图标
现在本地和远程分支已经关联上,但是可能因为本地和远程失联太久,本地分支的 HEAD 已经关联不上远程的 HEAD,本地 pull 代码也和远程不一致,这样就造成下面的问题:
你还没有结束你的合并 (MERGE_HEAD 存在)。退出, 因为未完成合并。本地没有更新到最新代码,
解决方法有三个:
方法一:
- git merge --abort
- git reset --merge
- git pull
代表意思分别为:中止合并 - 拉取的代码会回滚 ;重新进行合并;重新拉取代码,这种情况保留本地更改。
如果这几个命令并没有解决问题,那将就看第二个方法。开始方法二前,保证代码已经有备份,备份,备份;
方法二:
- git fetch --all
- git reset --hard origin/master
- git fetch
代表意思分别为:从远程获取代码到本地 - 不会合并;舍弃本地,远端代码覆盖本地代码,这时本地分支的 HEAD 会被重置成远程分支的 HEAD。慎重使用方法二,因为如果没有备份代码会造成代码丢失。养成备份的好习惯是多么重要。
方法三:
重新从 github 或码云上,clone 一份代码,然后把本地修改的复制进去,这个方法适合修改内容不多的朋友。
总结:git 解决冲突并不是没有规律,看一看 .git 目录文件,里面的 config 文件,里面有记录 HEAD 指向,一般冲突问题都出在这里。
解释:
1、HEAD 简单点可以看成提交到远程仓库时,前面的一串二进制字符串,例如
2、命令要使用双断线,例如 git fetch --all 是两个短线 "- -"
参考:
git-merge 完全解析
【已解决】github 中 git push origin master 出错:error: failed to push some refs to
You have not concluded your merge (MERGE_HEAD exists)
来源: https://www.2cto.com/kf/201801/709559.html