07/05/2018, 15:09

Xử lý Conflict trong Git

Thực hiện các thay đổi trong nhánh wchar_support Jerry đang làm việc trên nhánh wchar_support. Anh ta thay đổi tên của các tính năng và sau khi kiểm tra, anh ta repository những thay đổi của anh ta. [jerry@CentOS src]$ git branch master * wchar_support [jerry@CentOS src]$ git ...

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

Jerry đang làm việc trên nhánh wchar_support. Anh ta thay đổi tên của các tính năng và sau khi kiểm tra, anh ta repository những thay đổi của anh ta.

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

Lệnh trên sẽ 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 thẩm tra lại code, anh ta repository những thay đổi vừa thực hiện.

[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ẽ tạo ra 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 gituser@git.server.com:project.git
64192f9..3789fe8 wchar_support -> wchar_support

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

Trong khi ấy trong nhánh master, Tom cũng thay đổi tên của cùng chức năng và push những thay đổi đó tới nhánh master.

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

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

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 thẩm tra lại diff, anh ta repository những thay đổi này.

[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ẽ tạo ra 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 gituser@git.server.com:project.git
64192f9..ad4b530 master -> master

Trên nhánh wchar_support, Jerry thực hiện chức năng strchr cho chuỗi ký tự mở rộng. Sau khi kiểm tra, anh ta repository và push những thay đổi này tới nhánh wchar_support.

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

Lệnh trên sẽ 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 thẩm tra, anh ta repository những thay đổi này.

[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ẽ tạo ra 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 gituser@git.server.com:project.git
3789fe8..9d201a9 wchar_support -> wchar_support

Xử trí các conflict

Tom muốn thấy những gì mà Jerry đang làm trên nhánh tư nhân của cậu ta, vì thế anh ta cố gắng để pull những thay đổi mới nhất từ nhánh wchar_support, nhưng git hủy bỏ hoạt động này với thông báo lỗi sau:

[tom@CentOS src]$ git pull origin wchar_support

Lệnh trên sẽ 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.

Xử lý các conflict

Từ thông báo lỗi, dễ nhận ra rằng có một conflict trong src/string_operations.c. Anh ta chạy lệnh git command để quan sát chi tiết hơn.

[tom@CentOS src]$ git diff

Lệnh trên sẽ 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;

Khi cả Tom và Jerry đều thay đổi tên của cùng một chức năng, git trong trạng thái rối loạn và nó hỏi người sử dụng giải quyết vấn đề này.

Tom quyết định giữ tên chức năng từ đề nghị của Jerry, nhưng anh ta giữ lời bình được thêm bởi anh ta. Sau dỡ bỏ mâu thuẫn, git diff sẽ trông như sau:

[tom@CentOS src]$ git diff

Lệnh trên sẽ tạo ra kết quả 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;

Khi Tom đã chỉnh sửa các file, đầu tiên anh ta phải repository những thay đổi này và sau đó anh ta có thể pull những 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 conflict, bây giờ hoạt động pull sẽ thành công.

Loạt bài hướng dẫn học Git cơ bản và nâng cao của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint.com

Follow để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Bài học Git phổ biến khác tại vietjack.com:

0