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.c b/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 -s M 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 name 1 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.git 64192f9..3789fe8 wchar_support -> wchar_support

在主分支进行更改

同时在主分支Tom 也改变了名称相同的功能,并将其更改到主分支。

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

上面的命令会产生以下结果。

diff –git a/src/string_operations.c b/src/string_operations.c index 8fb4b00..52bec84 100644 — a/src/string_operations.c +++ b/src/string_operations.c @@ -1,7 +1,8 @@ #include <stdio.h> #include <wchar.h> -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 -s M 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_strlen 1 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.git 64192f9..ad4b530 master -> master

strchr 函数在分支Jerry 实现 wchar_support宽字符字符串。经过测试,他提交和推送其变化 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.c index 01ff4e0..163a779 100644 — a/src/string_operations.c +++ b/src/string_operations.c @@ -1,6 +1,16 @@ #include <stdio.h> #include <wchar.h> +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 -s M 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 string 1 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.git 3789fe8..9d201a9 wchar_support -> wchar_support

对付冲突

Tom想看,Jerry 在他的私人分支做什么?这就是为什么他试图从wchar_support分支把最新的修改,但Git 放弃操作在得到错误消息后。

[tom@CentOS src]$ git pull origin wchar_support

上面的命令会产生以下结果。

remote: Counting objects: 11, done. 63Git Tutorials remote: 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 * branch wchar_support -> FETCH_HEAD 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.

解决冲突

从错误消息很显然知道,是有冲突的在src/string_operations.c。他运行 git diff 命令查看进一步的细节。

[tom@CentOS src]$ git diff

上面的命令会产生以下结果。

diff –cc src/string_operations.c index 52bec84,163a779..0000000 — a/src/string_operations.c +++ b/src/string_operations.c @@@ -1,8 -1,17 +1,22 @@@ #include <stdio.h> #include <wchar.h> ++<<<<<<< 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不知道如何去做,因此这就是为什么它要求用户手动解决冲突。

Tom 决定保用 Jerry 建议的函数名,但他使用原来注释,因为这是他加入的。删除冲突标记混帐后差异会看起来像这样。

[tom@CentOS src]$ git diff

上面的命令会产生以下结果。

diff –cc src/string_operations.c diff –cc src/string_operations.c index 52bec84,163a779..0000000 — a/src/string_operations.c +++ b/src/string_operations.c @@@ -1,8 -1,17 +1,18 @@@ #include <stdio.h> #include <wchar.h> + 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.

Tom 已经解决冲突,现在推送操作将成功。

 

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Git 冲突处理

分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址