1.GIt代碼合并沖突
1.沖突產(chǎn)生的原因
兩個(gè)分支,同時(shí)修改了某一行代碼,導(dǎo)致合并失敗
| 分支 | 代碼結(jié)構(gòu) | 說(shuō)明 |
|---|---|---|
| master | String name = "zhangsan"; |
修改前,此版本master、dev一致 |
| master | String name = "zhangsan-master"; |
主干代碼,通過(guò)別的分支合并過(guò) |
| dev | String name = "zhangsan-dev"; |
開(kāi)發(fā)分支,修改相同行的代碼 |
2.如何解決合并沖突
1.代碼合并
git merge master # 通過(guò)此命令,合并master代碼到dev分支
2.查找到?jīng)_突的文件
- 方式一:執(zhí)行上面的合并命令后,會(huì)出現(xiàn)如下錯(cuò)誤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 即提示自動(dòng)合并失敗。
- 方式二: 使用git命令查找
git ls-files -u | cut -f 2 | sort -u
## 上面的命令由三部分組成:
## 1.git ls-fiels -u 查找未合并的文件。-u 參數(shù)代表顯示未合并的文件;
## 2.cut -f 2 不是git命令,是linux系統(tǒng)命令,指的是顯示list文件的第二列,默認(rèn)分隔符為 TAB;
## 3.sort -u 不是git命令,是linux系統(tǒng)命令,指的是將文件排序,并去重
-
方式三:使用其他git工具(smart git)
smartGit查看沖突文件
3.處理沖突文件
1.沖突文件示例
<<<<<<< HEAD ## 沖突文件中,<<<<<<< HEAD 代表接下來(lái)的代碼,是本地分支代碼
String name = "zhangsan-dev"; ## 具體的本地分支代碼
======= ## 沖突的本地代碼結(jié)束
String name = "zhangsan-master"; ## 代表其他分支的代碼
>>>>>>> master ## 代表分支為master
上面的代碼即表示:代碼出現(xiàn)了沖突,并且本地代碼為
String name = "zhangsan-dev";master分支的代碼是String name = "zhangsan-master";需要解決代碼沖突。
2.解決方式
-
確定保留那部分代碼:
- 一般原則是,以master代碼為主,先進(jìn)行合并。合并后再提交自己的變更。
- 如果確定本地代碼是需要保留,直接替換即可。
-
修改代碼
- 如果以master代碼為準(zhǔn),修改后的代碼示例:
String name = "zhangsan-master";- 如果以dev分支為準(zhǔn),修改后的代碼示例:
String name = "zhangsan-dev"; -
將代碼添加到索引空間
git add src/main/java/com/ttshixi/git/merge/MergeConflict.java ##將沖突的代碼添加到索引空間 git commit ##1.提交代碼,此時(shí)如果不寫(xiě)備注,會(huì)生成默認(rèn)的備注,并且會(huì)提示合并時(shí)沖突的文件 ##2.彈出備注后,輸入':',并輸入wq,保存退出即可。 git push ## 將本地代碼變更推送到github 解決沖突文件后,默認(rèn)的提交備注信息:
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.撤銷本次合并
- 如果執(zhí)行merge命令后,未執(zhí)行過(guò)commit,則可以使用如下命令
git reset --hard HEAD ## 將代碼恢復(fù)到合并前的狀態(tài)
