Cách Huỷ Quá Trình Hợp Nhất

Đối với rất nhiều người, xung đột trong quá trình hợp nhất là một nỗi sợ hãi tương tự như vô tình định dạng ổ cứng. Trong chương này, tôi sẽ giúp bạn vượt qua nỗi sợ này.

Bạn Không Thể Làm Hỏng Mọi Thứ

Điều quan trọng đầu tiên bạn cần nhớ là bạn luôn có thể hoàn tác quá trình hợp nhất và quay trở lại trạng thái trước khi xung đột xảy ra. Bạn luôn có thể hoàn tác và bắt đầu lại từ đầu.

Nếu bạn đến từ một hệ thống quản lý phiên bản khác như Subversion, có thể bạn đã bị sốc: xung đột trong Subversion thường được biết đến là rất phức tạp và tàn khốc. Một lý do cho điều này là Git hoạt động hoàn toàn khác biệt so với Subversion khi xử lý xung đột. Vì vậy, Git có khả năng giải quyết hầu hết mọi vấn đề trong quá trình hợp nhất – để lại cho bạn những tình huống đơn giản hơn để giải quyết.

Hơn nữa, xung đột chỉ ảnh hưởng đến bạn một cách cá nhân. Nó sẽ không làm ngừng lại toàn bộ nhóm của bạn hoặc làm hỏng kho chứa trung tâm của bạn. Điều này bởi vì trong Git, xung đột chỉ có thể xảy ra trên máy cục bộ của nhà phát triển – không phải trên máy chủ.

Xung Đột Hợp Nhất Xảy Ra Như Thế Nào

Trong Git, “hợp nhất” là hành động tích hợp một nhánh khác vào nhánh làm việc hiện tại của bạn. Bạn đang lấy các thay đổi từ ngữ cảnh khác (điều mà một nhánh thực sự đại diện cho: một ngữ cảnh) và kết hợp chúng với các tệp làm việc hiện tại của bạn.

Một điều tuyệt vời khi có Git làm hệ thống quản lý phiên bản của bạn là nó làm cho quá trình hợp nhất cực kỳ dễ dàng: trong hầu hết các trường hợp, Git sẽ tự động tìm cách tích hợp các thay đổi mới.

XEM THÊM:  Học cách Chỉnh sửa Hiệu ứng hình ảnh

Tuy nhiên, có một số tình huống bạn có thể phải can thiệp và chỉ cho Git biết cần làm gì. Điều này thường áp dụng khi có sự thay đổi cùng một tệp tin. Ngay cả trong trường hợp này, Git rất có thể tự động giải quyết được xung đột. Nhưng nếu hai người đã thay đổi cùng những dòng mã trong cùng một tệp tin, hoặc nếu một người quyết định xóa tệp tin trong khi người còn lại quyết định sửa đổi nó, Git không thể biết được điều gì là chính xác. Git sẽ đánh dấu tệp tin có xung đột – bạn phải giải quyết nó trước khi tiếp tục công việc của mình.

Cách Giải Quyết Xung Đột Hợp Nhất

Đối mặt với một xung đột hợp nhất, bước đầu tiên là hiểu rõ điều gì đã xảy ra. Ví dụ: Đồng nghiệp của bạn đã sửa đổi cùng một tệp tin ở cùng dòng mã với bạn? Anh ta đã xóa một tệp tin mà bạn đã sửa đổi? Cả hai bạn đã thêm vào một tệp tin có cùng tên? Git sẽ thông báo cho bạn biết rằng bạn có “đường dẫn chưa được hợp nhất” (đó chỉ là một cách khác để nói rằng bạn có một hoặc nhiều xung đột) thông qua “git status”:

$ git status
# Đang ở nhánh contact-form
# Bạn có đường dẫn chưa được hợp nhất.
# (sửa xung đột và chạy "git commit")
#
# Đường dẫn chưa được hợp nhất:
# (sử dụng "git add <tệp tin>..." để đánh dấu giải quyết)
#
# cả hai đã sửa đổi: contact.html
# không có thay đổi được thêm vào để commit (sử dụng "git add" và/hoặc "git commit -a")

Hãy xem xét chi tiết cách giải quyết trường hợp phổ biến nhất, khi hai sửa đổi ảnh hưởng đến cùng một tệp tin ở cùng dòng mã. Bây giờ là lúc xem nội dung của tệp tin có xung đột. Git đã đánh dấu phần gây xung đột trong tệp tin bằng cách bọc nó trong “<<<<<<<” và “>>>>>>>”.

XEM THÊM:  How To Chuyển Đổi Kilogram Sang Gram

Phần sau đánh dấu đầu tiên bắt nguồn từ nhánh làm việc hiện tại của bạn. Sau các dấu nhắc nhọn, Git cho chúng ta biết nguồn gốc thay đổi đến từ đâu (từ nhánh nào). Dòng mã với “=======” phân tách hai thay đổi xung đột.

Nhiệm vụ của chúng ta bây giờ là làm sạch những dòng mã này: khi hoàn thành, tệp tin phải trông chính xác như chúng ta muốn. Có thể cần tham khảo người đồng đội đã viết những thay đổi xung đột để quyết định mã nào là đúng cuối cùng. Có thể là mã của bạn, có thể là của anh ta – hoặc có thể là sự kết hợp giữa hai cái.

Mở tệp tin gốc trong trình soạn thảo của bạn và làm sạch nó là hoàn toàn hợp lệ, nhưng không thoải mái lắm. Sử dụng công cụ hợp nhất đặc biệt có thể làm công việc này dễ dàng hơn nhiều (nếu bạn đã cài đặt…). Bạn có thể cấu hình công cụ bạn chọn bằng cách sử dụng lệnh “git config”. Hãy tham khảo tài liệu của công cụ để biết hướng dẫn chi tiết. Sau đó, trong trường hợp xung đột, bạn có thể gọi công cụ đó bằng cách đơn giản gõ “git mergetool”.

Ví dụ này, tôi sử dụng “Kaleidoscope.app” trên Mac:

Kaleidoscope

Các cột bên trái và bên phải đại diện cho những thay đổi xung đột; một cách trình bày tinh tế hơn so với “<<<” và “>>>”. Bây giờ, bạn chỉ cần chọn thay đổi nào sẽ được chấp nhận. Cột giữa hiển thị mã kết quả; trong các công cụ tốt, bạn còn có thể chỉnh sửa mã này thêm nữa.

XEM THÊM:  How To Oscola Reference

Bây giờ, sau khi làm sạch tệp tin với mã cuối cùng, cần lưu lại tệp tin. Để cho Git biết bạn đã hoàn thành với tệp tin này, bạn nên thoát khỏi công cụ hợp nhất để tiếp tục. Đằng sau màn hình, điều này cho biết Git thực thi lệnh “git add” cho tệp tin (hiện đã hoàn toàn giải quyết xung đột). Nếu bạn quyết định không sử dụng công cụ hợp nhất mà làm sạch tệp tin trong trình soạn thảo của bạn, bạn phải đánh dấu tệp tin đã giải quyết bằng tay (bằng cách thực thi “git add <tên tệp tin>”).

Cuối cùng, sau khi giải quyết tất cả các xung đột, tình huống xung đột hợp nhất cần được kết thúc bằng một commit thường.

Làm Thế Nào Để Hoàn Tác Một Quá Trình Hợp Nhất

Bạn luôn cần nhớ rằng bạn có thể quay trở lại trạng thái trước khi bạn bắt đầu quá trình hợp nhất bất kỳ lúc nào. Điều này nên cho bạn sự tự tin rằng bạn không thể làm hỏng bất cứ điều gì. Trên dòng lệnh, chỉ cần gõ “git merge -abort” làm điều này cho bạn.

Trong trường hợp bạn đã mắc lỗi khi giải quyết xung đột và nhận ra điều này sau khi hoàn thành quá trình hợp nhất, bạn vẫn có thể dễ dàng hoàn tác: chỉ cần quay trở lại commit trước khi xảy ra xung đột với “git reset –hard ” và bắt đầu lại từ đầu.