Git - Xử lý xung đột

Thực hiện các thay đổi trong chi nhánh wchar_support

Jerry đang làm việc trên wchar_supportchi nhánh. Anh ta thay đổi tên của các chức năng và sau khi thử nghiệm, anh ta cam kết những thay đổi của mình.

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

Lệnh trên tạo ra kết quả sau:

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;

Sau khi xác minh mã, anh ta cam kết các thay đổi của mình.

[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

Lệnh trên sẽ cho kết quả sau:

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 [email protected]:project.git
64192f9..3789fe8 wchar_support -> wchar_support

Thực hiện các thay đổi trong nhánh chính

Trong khi đó ở nhánh chính, Tom cũng thay đổi tên của chức năng tương tự và đẩy những thay đổi của mình lên nhánh chủ.

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

Lệnh trên tạo ra kết quả sau:

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;

Sau khi xác minh sự khác biệt, anh ấy cam kết những thay đổi của mình.

[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

Lệnh trên sẽ cho kết quả sau:

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 [email protected]:project.git
64192f9..ad4b530 master -> master

Trên wchar_supportnhánh, Jerry thực hiện hàm strchr cho chuỗi ký tự rộng. Sau khi thử nghiệm, anh ấy cam kết và đẩy các thay đổi của mình lênwchar_support chi nhánh.

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

Lệnh trên tạo ra kết quả sau:

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;

Sau khi xác minh, anh ấy cam kết những thay đổi của mình.

[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

Lệnh trên sẽ cho kết quả sau:

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 [email protected]:project.git
3789fe8..9d201a9 wchar_support -> wchar_support

Giải quyết xung đột

Tom muốn xem Jerry đang làm gì trên chi nhánh riêng của mình vì vậy, anh ấy cố gắng lấy những thay đổi mới nhất từ wchar_support nhánh, nhưng Git hủy bỏ hoạt động với thông báo lỗi sau.

[tom@CentOS src]$ git pull origin wchar_support

Lệnh trên tạo ra kết quả sau:

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.

Giải quyết xung đột

Từ thông báo lỗi, rõ ràng là có xung đột trong src / string_operations.c. Anh ta chạy lệnh git diff để xem thêm chi tiết.

[tom@CentOS src]$ git diff

Lệnh trên tạo ra kết quả sau:

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;

Vì cả Tom và Jerry đều thay đổi tên của cùng một chức năng, Git đang ở trong tình trạng bối rối và nó yêu cầu người dùng giải quyết xung đột theo cách thủ công.

Tom quyết định giữ tên chức năng do Jerry gợi ý, nhưng anh ta giữ nguyên nhận xét do anh ta thêm vào. Sau khi xóa các điểm đánh dấu xung đột, git diff sẽ trông như thế này.

[tom@CentOS src]$ git diff

Lệnh trên cho kết quả như sau.

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;

Vì Tom đã sửa đổi các tệp, anh ta phải thực hiện những thay đổi này trước và sau đó, anh ta có thể kéo các thay đổi.

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

[tom@CentOS src]$ git pull origin wchar_support.

Tom đã giải quyết mâu thuẫn, bây giờ hoạt động kéo sẽ thành công.