上一章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操作将会成功。
评论前必须登录!
注册