• Git提交代码的处理流程(转)


    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 push origin wchar_support.
    

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


    http://www.yiibai.com/git/git_handling_conflicts.html


  • 相关阅读:
    [算法练习]ZigZag Conversion
    获取所有后缀DDE打开命令
    [算法练习]Add Two Numbers
    获取dll编译时生成的pdb文件的名称
    [转载]定位 C++/CLI 库的加载失败异常
    在C++/CLI环境下,千万不要把普通全局函数当标准C/C++的函数指针传递给native的库使用
    Mono集成中使用api获取当前mono 调用堆栈的方法
    简单对比了一下MonoXml与SystemXml在Unity下的表现
    C++从LPEXCEPTION_POINTERS获取调用堆栈
    遇到doxygen生成的chm文档目录如果有中文是乱码?
  • 原文地址:https://www.cnblogs.com/softidea/p/4896349.html
Copyright © 2020-2023  润新知