个性化阅读
专注于IT技术分析

深入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操作将会成功。

赞(1)
未经允许不得转载:srcmini » 深入Git开发:Git冲突处理操作详细介绍

评论 抢沙发

评论前必须登录!