Git 简明教程
Git - Handling Conflicts
Perform Changes in wchar_support Branch
Jerry 正在 wchar_support 分支上工作。他更改了函数名称,并在测试后提交了他的更改。
Jerry is working on the wchar_support branch. He changes the name of the functions and after testing, he commits his changes.
[jerry@CentOS src]$ git branch
master
* wchar_support
[jerry@CentOS src]$ git diff
上述命令会产生以下结果 −
The above command produces the following result −
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;
在验证了代码后,他提交了他的更改。
After verifying the code he commits his changes.
[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
以上命令将生成以下结果 −
The above command will produce the following result −
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
Perform Changes in Master Branch
与此同时,在 master 分支中,Tom 也更改了相同函数的名称并将他的更改推送到 master 分支。
Meanwhile in the master branch, Tom also changes the name of the same function and pushes his changes to the master branch.
[tom@CentOS src]$ git branch
* master
[tom@CentOS src]$ git diff
上述命令会产生以下结果 −
The above command produces the following result −
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;
验证 diff 后,他提交了他的更改。
After verifying diff, he commits his changes.
[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
以上命令将生成以下结果 −
The above command will produce the following result −
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
在 wchar_support 分支中,Jerry 为宽字符字符串实施 strchr 函数。测试后,他提交并推送他的更改到 wchar_support 分支。
On the wchar_support branch, Jerry implements strchr function for wide character string. After testing, he commits and pushes his changes to the wchar_support branch.
[jerry@CentOS src]$ git branch
master
* wchar_support
[jerry@CentOS src]$ git diff
上述命令会产生以下结果 −
The above command produces the following result −
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;
验证后,他提交了他的更改。
After verifying, he commits his changes.
[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
以上命令将生成以下结果 −
The above command will produce the following result −
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
Tackle Conflicts
Tom 想要了解 Jerry 在他的私有分支中做了什么,所以他尝试从 wchar_support 分支中拉取最新的更改,但 Git 中止了该操作并显示了以下错误消息。
Tom wants to see what Jerry is doing on his private branch so, he tries to pull the latest changes from the wchar_support branch, but Git aborts the operation with the following error message.
[tom@CentOS src]$ git pull origin wchar_support
上述命令会产生以下结果 −
The above command produces the following result −
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.
Resolve Conflicts
从该错误消息,可以清楚地看出在 src/string_operations.c 中存在冲突。他运行 git diff 命令来查看进一步的详细信息。
From the error message, it is clear that there is a conflict in src/string_operations.c . He runs the git diff command to view further details.
[tom@CentOS src]$ git diff
上述命令会产生以下结果 −
The above command produces the following result −
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 处于混乱状态,并且它要求用户手动解决冲突。
As both Tom and Jerry changed the name of the same function, Git is in a state of confusion and it asks the user to resolve the conflict manually.
Tom 决定保留 Jerry 建议的函数名称,但他保留了他添加的注释,原封不动。删除冲突标记后,git diff 将如下所示。
Tom decides to keep the function name suggested by Jerry, but he keeps the comment added by him, as it is. After removing the conflict markers, git diff will look like this.
[tom@CentOS src]$ git diff
上述命令会产生以下结果。
The above command produces the following result.
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 已修改文件,他必须首先提交这些更改,然后才能拉取这些更改。
As Tom has modified the files, he has to commit these changes first and thereafter, he can pull the changes.
[tom@CentOS src]$ git commit -a -m 'Resolved conflict'
[master 6b1ac36] Resolved conflict
[tom@CentOS src]$ git pull origin wchar_support.
Tom 已解决冲突,现在拉取操作将成功。
Tom has resolved the conflict, now the pull operation will succeed.