深入Git开发(Git冲突处理操作详细介绍)

【深入Git开发(Git冲突处理操作详细介绍)】上一章Git教程请查看:Git分支管理和操作
这一章中我们开始详细介绍Git冲突处理的操作。
1、在wchar_support分支中执行更改userB正在处理wchar_support分支,他更改了函数的名称,并在测试之后提交更改。

$ git branch master * wchar_support $ git diff

上面的命令产生了下面的结果:
diff --git a/src/string_operations.c b/src/string_operations.c --- a/src/string_operations.c +++ b/src/string_operations.c#include < stdio.h> #include < wchar.h> -size_t w_strlen(const wchar_t *s) +size_t my_wstrlen(const wchar_t *s) { const wchar_t *p = s;

在验证代码之后他提交更改。
$ git status -s M string_operations.c$ git add string_operations.c$ git commit -m "更改函数名称"$ git push origin wchar_support

上述命令将产生下列结果:
Counting objects: 7, done. Compressing objects: 100% (4/4), done.

2、在主分支中执行更改同时在主分支中,userA也更改了相同函数的名称,并将其更改推给主分支。
$ git branch * master $ git diff

上面的命令产生了下面的结果:
diff --git a/src/string_operations.c b/src/string_operations.c #include < stdio.h> #include < wchar.h> -size_t w_strlen(const wchar_t *s) +size_t my_wc_strlen(const wchar_t *s) { const wchar_t *p = s;

在验证diff之后,他提交更改。
$ git status -s M string_operations.c$ git add string_operations.c$ git commit -m "将函数名从w_strlen改为my_wc_strlen"$ git push origin master

上述命令将产生下列结果:
Counting objects: 7, done. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 470 bytes, done.

在wchar_support分支上,userB实现了用于宽字符串的strchr函数,测试之后他提交并将更改推到wchar_support分支。
$ git branch master * wchar_support $ git diff

在验证之后他提交更改。
$ git status -s M string_operations.c$ git add string_operations.c$ git commit -m "为宽字符串添加strchr函数"$ git push origin wchar_support

3、处理冲突userA想看看userB在他的私有分支上做了什么,所以他试图从wchar_support分支中获取最新的更改,但是Git使用以下错误消息中止了操作。
$ git pull origin wchar_support

上面的命令产生以下结果:
Auto-merging src/string_operations.c CONFLICT (content): Merge conflict in src/string_operations.c Automatic merge failed; fix conflicts and then commit the result.

4、解决冲突从错误消息可以看出,src/string_operations.c中存在冲突,他可以运行git diff命令来查看更多细节。
$ git diff

由于userA和userB更改了同一个函数的名称,Git处于混乱状态,它要求用户手动解决冲突。
userA决定保留userB建议的函数名,但保留他添加的注释,删除冲突标记后,git diff将如下所示。
diff --cc src/string_operations.c diff --cc src/string_operations.c

由于UserA已经修改了文件,所以他必须先提交这些更改,然后才能拉出更改。
$ git commit -a -m "解决冲突" [master xx] Resolved conflict$ git pull origin wchar_support.

UserA已经解决了冲突,现在pull操作将会成功。

    推荐阅读