1.GIt代码合并冲突
1.冲突产生的原因
两个分支,同时修改了某一行代码,导致合并失败
分支 | 代码结构 | 说明 |
---|---|---|
master | String name = "zhangsan"; |
修改前,此版本master、dev一致 |
master | String name = "zhangsan-master"; |
主干代码,通过别的分支合并过 |
dev | String name = "zhangsan-dev"; |
开发分支,修改相同行的代码 |
2.如何解决合并冲突
1.代码合并
git merge master # 通过此命令,合并master代码到dev分支
2.查找到冲突的文件
- 方式一:执行上面的合并命令后,会出现如下错误20d:
CONFLICT (content): Merge conflict in src/main/java/com/ttshixi/git/merge/MergeConflict.java
Automatic merge failed; fix conflicts and then commit the result. ## Automatic merge failed 即提示自动合并失败。
- 方式二: 使用git命令查找
git ls-files -u | cut -f 2 | sort -u
## 上面的命令由三部分组成:
## 1.git ls-fiels -u 查找未合并的文件。-u 参数代表显示未合并的文件;
## 2.cut -f 2 不是git命令,是linux系统命令,指的是显示list文件的第二列,默认分隔符为 TAB;
## 3.sort -u 不是git命令,是linux系统命令,指的是将文件排序,并去重
-
方式三:使用其他git工具(smart git)
smartGit查看冲突文件
3.处理冲突文件
1.冲突文件示例
<<<<<<< HEAD ## 冲突文件中,<<<<<<< HEAD 代表接下来的代码,是本地分支代码
String name = "zhangsan-dev"; ## 具体的本地分支代码
======= ## 冲突的本地代码结束
String name = "zhangsan-master"; ## 代表其他分支的代码
>>>>>>> master ## 代表分支为master
上面的代码即表示:代码出现了冲突,并且本地代码为
String name = "zhangsan-dev";
master分支的代码是String name = "zhangsan-master";
需要解决代码冲突。
2.解决方式
-
确定保留那部分代码:
- 一般原则是,以master代码为主,先进行合并。合并后再提交自己的变更。
- 如果确定本地代码是需要保留,直接替换即可。
-
修改代码
- 如果以master代码为准,修改后的代码示例:
String name = "zhangsan-master";
- 如果以dev分支为准,修改后的代码示例:
String name = "zhangsan-dev";
-
将代码添加到索引空间
git add src/main/java/com/ttshixi/git/merge/MergeConflict.java ##将冲突的代码添加到索引空间 git commit ##1.提交代码,此时如果不写备注,会生成默认的备注,并且会提示合并时冲突的文件 ##2.弹出备注后,输入':',并输入wq,保存退出即可。 git push ## 将本地代码变更推送到github
解决冲突文件后,默认的提交备注信息:
Merge branch 'master' into dev
# Conflicts:
# src/main/java/com/ttshixi/git/merge/MergeConflict.java
#
# 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.
3.撤销本次合并
- 如果执行merge命令后,未执行过commit,则可以使用如下命令
git reset --hard HEAD ## 将代码恢复到合并前的状态