11.1 Nhánh trong git
Làm việc với nhánh (branches) trong Git — là một trong những khía cạnh quan trọng của quản lý phiên bản, cho phép quản lý nhiều dòng phát triển song song trong cùng một repository. Việc phân nhánh làm cho Git trở thành công cụ mạnh mẽ cho hợp tác, thử nghiệm và quản lý các phiên bản khác nhau của dự án.
Bạn có thể nghĩ về nhánh trong git như là các thư mục, nơi git sao chép dự án của bạn. Bạn có một thư mục chính của dự án trong local repository — master, và git có thể tạo các bản sao của thư mục này để bạn thử nghiệm với một số điều mà không làm hỏng mã chính hoạt động tốt. Những thư mục sao chép đó được gọi là nhánh — branches.
Nhánh — là những lựa chọn thay thế của mã. Giả sử bạn muốn thay đổi một cái gì đó trong một dự án lớn, thực hiện một thử nghiệm mà bạn chưa chắc chắn. Bạn sẽ làm điều đó như thế nào mà không có git?
Bạn có thể sao chép dự án vào một thư mục mới và thử thay đổi mọi thứ trong đó. Nếu kết quả làm bạn hài lòng, thì bạn có thể sao chép nó vào thư mục chính. Nếu không thích — quên nó đi, hoặc xóa nó luôn.
Hoặc chúng ta hãy lấy một ví dụ từ cuộc sống. Giả sử bạn đang viết một cuốn sách:
- Bạn có bản thảo của cuốn sách (nhánh chính).
- Bạn muốn thử thay đổi kết thúc (tạo một nhánh mới).
- Bạn viết kết thúc mới trong một tài liệu riêng biệt (làm việc trong nhánh mới).
- Nếu kết thúc mới tốt hơn, bạn thay thế kết thúc cũ trong bản thảo (hợp nhất nhánh).
- Xóa tài liệu riêng biệt với kết thúc mới (xóa nhánh).
11.2 Tạo nhánh
Tạo nhánh trong IntelliJ IDEA rất đơn giản:
Nhập tên nhánh:
IntelliJ IDEA ngay lập tức hiện tên nhánh hiện tại của bạn ở trên cùng trong menu:
Trước đó ở đó có gì?
Ở đó có tên của nhánh đầu tiên và chính của bạn — master.
Bây giờ ở đó hiển thị test, có nghĩa là Git (dưới sự chỉ đạo của IntelliJ IDEA) không chỉ tạo ra một nhánh mới mà còn chuyển ngay lập tức sang nó.
Bây giờ hãy thêm một số mã vào file main.html trong nhánh hiện tại (test) và commit nó:
11.3 Chuyển đổi giữa các nhánh
Bước 1. Chọn nhánh.
Bây giờ hãy chuyển sang nhánh cũ của chúng ta. Click vào menu trên cùng, và bạn thấy gì ở đó?
Đừng lo lắng — mọi thứ đều đơn giản:
Local — đây là danh sách các nhánh trong local git repository của bạn. Ở đây có hai nhánh:
- test
- master
Remote — đây là repository trên server GitHub của bạn. Chúng tôi đã push thay đổi của bạn lên đó, nhưng không có nhánh mới, điều này hợp lý. Remote repository có tên là origin, và trong đó chỉ có nhánh master.
Recent — đây chỉ là danh sách tên các nhánh gần đây mà bạn đã làm việc: mục này IntelliJ IDEA thêm vào để thuận tiện và tốc độ.
Tên origin/master ở bên phải tên repository local là tên repository remote mà nó đang được đồng bộ hóa, và nơi các thay đổi sẽ được push.
Bước 2. Tải mã nhánh vào thư mục hiện tại.
Bước 3. Kiểm tra.
Tôi thấy nhánh «master» và mã cũ:
11.4 Hợp nhất nhánh
Bây giờ hãy thử kết hợp mã từ hai nhánh của chúng ta.
Bước 1. Đầu tiên hãy thêm vào dự án của chúng ta một file mới - index.html và viết vào đó một số mã:
- Tạo file index.html
- Viết mã <h1>Hello</h1>
- Commit file
Đây là hai file của tôi trông như thế nào trong nhánh master:
Bước 2. Hợp nhất nhánh.
Chúng ta sẽ merge vào nhánh hiện tại (master) các thay đổi được thực hiện trong nhánh test.
Để làm điều này, hãy sử dụng menu trên cùng và lệnh «Merge ‘test’ into ‘master’»:
Bước 3. Kiểm tra kết quả.
Kiểm tra:
- Trên cùng vẫn hiển thị nhánh master
- Chúng ta có 2 file: index.html và main.html
- File main.html chứa mã đã được thêm vào nhánh test
11.5 Xung đột khi hợp nhất
Đôi khi khi hợp nhất nhánh có thể xảy ra xung đột.
Nếu bạn thực hiện thay đổi trong cùng một file ở các nhánh khác nhau và cố gắng hợp nhất chúng, có thể xảy ra xung đột.
Xung đột file văn bản
Git — là một hệ thống rất thông minh — nó nhận biết các loại file. Nếu bạn thực hiện thay đổi ở các vị trí khác nhau trong các file mà nó coi là văn bản, nó sẽ chỉ chuyển các thay đổi từ file này sang file khác vào đúng vị trí như một người làm.
Xung đột file nhị phân
Nhưng nếu bạn sửa chữa hình ảnh hoặc tài liệu ở đâu đó, Git sẽ không cố gắng hợp nhất các phần của chúng vào một: nó chỉ đề nghị bạn chọn phiên bản file nào bạn muốn giữ trong nhánh hiện tại.
Giải quyết xung đột bằng tay
Nếu bạn thực hiện thay đổi trong cùng một vị trí của file văn bản, thì Git sẽ không thể hợp nhất các phiên bản khác nhau đúng cách và đề nghị bạn làm điều đó:
Đây là cách nó có thể trông như thế:
Bạn thấy gì ở đây:
- Bên trái — nội dung của file main.html trong nhánh master
- Bên phải — nội dung của file main.html trong nhánh test
- Ở giữa IntelliJ IDEA đề nghị bạn viết phiên bản cuối cùng của mã (bạn có thể click vào các nút «>>» và «<<» để tự động chèn thay đổi từ file nào đó)
Tôi đã chấp nhận phiên bản mater và viết mã bằng tay. Đây là những gì tôi có:
11.6 Lịch sử thay đổi
Thêm điều hữu ích và thú vị. Bạn có thể xem lịch sử thay đổi bất kỳ file nào, bằng cách nhấn nút Show History. Có hai vị trí mà nó có thể nằm. Tìm chúng.
Đây là cách lịch sử thay đổi trông như thế nào đối với tôi cho file main.html:
Giải thích:
-
Bên trái bạn thấy lịch sử thay đổi của file cụ thể:
- Thay đổi càng mới, càng cao, càng cũ - càng thấp
- Ở đây cũng hiển thị lịch sử hợp nhất nhánh
- Bên phải — những thay đổi đã được thực hiện trong commit cụ thể
GO TO FULL VERSION