开发手册 欢迎您!
软件开发者资料库

Git - 处理冲突

Git处理冲突 - 从基本概念到高级概念,从简单而简单的步骤学习Git(快速灵活的版本控制工具),其中包括安装,项目创建,文件添加,提交,状态检查,标记项目,合并文件,分支项目等示例,调试项目,共享项目,管理项目和比较项目。

在wchar_support分支中执行更改

Jerry正在处理 wchar_support 分支.他更改了函数的名称,经过测试,他提交了更改.

  [jerry @ CentOS src] $ git branch  master  * wchar_support  [jerry @ CentOS src] $ git diff

以上命令产生以下结果 :

  diff --git a/src/string_operations.cb/src/string_operations.c  index 8fb4b00..01ff4e0 100644   -  -  a/src/string_operations.c  +++ b/src/string_operations.c  @@ -1,7 +1,7 @@  #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;

验证代码后,他提交了更改.

[jerry@CentOS src]$ git status -sM string_operations.c[jerry@CentOS src]$ git add string_operations.c[jerry@CentOS src]$ git commit -m 'Changed function name'[wchar_support 3789fe8] Changed function name1 files changed, 1 insertions(+), 1 deletions(-)[jerry@CentOS src]$ git push origin wchar_support

上面的命令将产生以下结果 :

Counting objects: 7, done.Compressing objects: 100% (4/4), done.Writing objects: 100% (4/4), 409 bytes, done.Total 4 (delta 1), reused 0 (delta 0)To gituser@git.server.com:project.git64192f9..3789fe8 wchar_support -> wchar_support

在Master Branch中执行更改

同时在master分支中,Tom也更改了同一个函数的名称并将他的更改推送到主分支.

  [tom @ CentOS src] $ git branch  * master  [ tom @ CentOS src] $ git diff

以上命令产生以下结果 :

diff --git a/src/string_operations.c b/src/string_operations.cindex 8fb4b00..52bec84 100644--- a/src/string_operations.c+++ b/src/string_operations.c@@ -1,7 +1,8 @@#include #include -size_t w_strlen(const wchar_t *s)+/* wide character strlen fucntion */+size_t my_wc_strlen(const wchar_t *s){   const wchar_t *p = s;

在验证差异后,他会提交更改.

[tom@CentOS src]$ git status -sM string_operations.c[tom@CentOS src]$ git add string_operations.c[tom@CentOS src]$ git commit -m 'Changed function name from w_strlen to my_wc_strlen'[master ad4b530] Changed function name from w_strlen to my_wc_strlen1 files changed, 2 insertions(+), 1 deletions(-)[tom@CentOS src]$ git push origin master

上述命令将产生以下结果 :

Counting objects: 7, done.Compressing objects: 100% (4/4), done.Writing objects: 100% (4/4), 470 bytes, done.Total 4 (delta 1), reused 0 (delta 0)To gituser@git.server.com:project.git64192f9..ad4b530 master -> master

wchar_support 分支上,Jerry为宽字符串实现了strchr函数.经过测试,他提交并将其更改推送到 wchar_support 分支.

  [jerry @ CentOS src] $ git branch  master  * wchar_support  [jerry @ CentOS src] $ git diff

以上命令产生以下结果 :

diff --git a/src/string_operations.c b/src/string_operations.cindex 01ff4e0..163a779 100644--- a/src/string_operations.c+++ b/src/string_operations.c@@ -1,6 +1,16 @@#include #include +wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)+{   +   while (*ws)    {      +      if (*ws == wc)      +      return ws;      +      ++ws;      +    }   + return NULL;   +}+size_t my_wstrlen(const wchar_t *s){   const wchar_t *p = s;

验证后,他会提交更改.

[jerry@CentOS src]$ git status -sM string_operations.c[jerry@CentOS src]$ git add string_operations.c[jerry@CentOS src]$ git commit -m 'Addded strchr function for wide character string'[wchar_support 9d201a9] Addded strchr function for wide character string1 files changed, 10 insertions(+), 0 deletions(-)[jerry@CentOS src]$ git push origin wchar_support

以上命令将产生以下结果 :

Counting objects: 7, done.Compressing objects: 100% (4/4), done.Writing objects: 100% (4/4), 516 bytes, done.Total 4 (delta 1), reused 0 (delta 0)To gituser@git.server.com:project.git3789fe8..9d201a9 wchar_support -> wchar_support

解决冲突

汤姆想看看杰里在他的私人分支上做了什么,所以他试图拉来自 wchar_support 分支的最新更改,但Git使用以下错误消息中止操作.

  [tom @ CentOS src] $ git pull origin wchar_support

上面的命令产生以下结果 :

remote: Counting objects: 11, done.63Git Tutorialsremote: Compressing objects: 100% (8/8), done.remote: Total 8 (delta 2), reused 0 (delta 0)Unpacking objects: 100% (8/8), done.From git.server.com:project* branchwchar_support -> FETCH_HEADAuto-merging src/string_operations.cCONFLICT (content): Merge conflict in src/string_operations.cAutomatic merge failed; fix conflicts and then commit the result.

解决冲突

从错误消息中可以看出,src/string_operations.c中存在冲突.他运行git diff命令查看更多详细信息.

  [tom @ CentOS src] $ git diff

上面的命令产生以下结果 :

diff --cc src/string_operations.cindex 52bec84,163a779..0000000--- a/src/string_operations.c+++ b/src/string_operations.c@@@ -1,8 -1,17 +1,22 @@@#include #include ++<<<<<<< HEAD+/* wide character strlen fucntion */+size_t my_wc_strlen(const wchar_t *s)++=======+ wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)+{   +   +   while (*ws)    {      if (*ws == wc)      +      return ws;      +      ++ws;      +    }   + return NULL;   +}++ size_t my_wstrlen(const wchar_t *s)++>>>>>>>9d201a9c61bc4713f4095175f8954b642dae8f86{   const wchar_t *p = s;

由于Tom和Jerry都更改了相同功能的名称,Git处于混乱状态,并要求用户手动解决冲突./p>

Tom决定保留Jerry建议的功能名称,但他保留了他添加的评论,因为它是.删除冲突标记后,git diff将如下所示.

  [tom @ CentOS src] $ git diff

上述命令产生以下结果.

diff --cc src/string_operations.cdiff --cc src/string_operations.cindex 52bec84,163a779..0000000--- a/src/string_operations.c+++ b/src/string_operations.c@@@ -1,8 -1,17 +1,18 @@@#include #include + wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)+{   +   while (*ws)    {      +      if (*ws == wc)      +      return ws;      +      ++ws;      +    }   + return NULL;   +}++/* wide character strlen fucntion */- size_t my_wc_strlen(const wchar_t *s)+ size_t my_wstrlen(const wchar_t *s){   const wchar_t *p = s;

由于Tom修改了文件,他必须首先提交这些更改,然后他可以提取更改.

[tom@CentOS src]$ git commit -a -m 'Resolved conflict'[master 6b1ac36] Resolved conflict[tom@CentOS src]$ git pull origin wchar_support.

汤姆解决了冲突,现在拉动操作将成功.