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 chính của quản lý phiên bản, cho phép phát triển song song
nhiều dòng trong một repository. Nhánh hoá
làm cho Git trở thành công cụ mạnh mẽ cho sự 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ể coi nhánh trong Git như các thư mục, nơi Git sao chép dự án của bạn. Bạn có thư mục chính của dự án của bạn trong repository cục bộ
của bạn — master
. Git có thể tạo các bản sao của thư mục này để bạn có thể thử nghiệm mà không nguy cơ làm hỏng mã chính đang hoạt động tốt. Những thư mục-sao chép này được gọi là nhánh — branches
.
Nhánh — là các lựa chọn thay thế cho mã. Giả sử, bạn muốn thay đổi điều gì đó trong một dự án lớn hoặc thực hiện một thử nghiệm, trong đó bạn không hoàn toàn chắc chắn. Bạn sẽ làm gì nếu 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, 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 là xoá nó đi hoàn toàn.
Hãy xem xét một ví dụ từ đời thực, chẳng hạn như viết sách:
- Bạn có bản thảo của một cuốn sách (nhánh chính).
- Bạn quyết định thử thay đổi kết thúc truyện (tạo 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 với kết thúc mới (xóa nhánh).
11.2 Tạo nhánh
Tạo một nhánh trong PyCharm rất đơn giản.
Nhập tên nhánh.
PyCharm sẽ ngay lập tức hiển thị tên nhánh hiện tại của bạn trên menu:
Trước đó là gì?
Trước đây là tên nhánh đầu tiên và chủ yếu của bạn —
master
.
Bây giờ hiển thị là test
, có nghĩa là Git (dưới sự chỉ đạo của
PyCharm) không chỉ tạo ra nhánh mới mà còn ngay lập tức chuyển sang
nó.
Thêm một số mã vào tập tin main.py
của 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. Nhấp vào menu phía trên, và chúng ta thấy gì?
Đừng bối rối — mọi thứ rất đơn giản:
Local
— là danh sách các nhánh của
git-repository cục bộ của bạn; ở đây có hai cái:
test
master
Remote
— là repository trên máy chủ của bạn,
nơi lưu trữ trên GitHub. Chúng ta đã gửi các thay đổi của bạn lên đó, nhưng nhánh mới
không có ở đó, điều này là hợp lý. Repository từ xa có tên là origin,
và chỉ có nhánh master
trong đó.
Recent
— là danh sách tên của các nhánh gần đây,
mà bạn đã làm việc. Mục này được thêm vào trong PyCharm để tiện lợi và
nhanh chóng.
Tên origin/master
bên phải của tên repository
cục bộ — là tên của repository từ xa mà nó đang
đồng bộ hóa, và nơi thay đổi sẽ được gửi đến.
Bước 2. — Tải mã của nhánh vào thư mục hiện tại.
Bước 3. Kiểm tra:.
Tôi có nhánh (master)
xuất hiện và mã cũ.
11.4 Gộp nhánh
Bây giờ hãy thử hợp nhất mã từ hai nhánh của chúng ta.
Bước 1. Đầu tiên thêm vào dự án của chúng ta một tập tin mới — init.py và viết một số mã trong đó.
- Tạo tập tin init.py
- Viết trong đó mã print("Xin chào")
- Commit tập tin.
Đây là cách mà hai tập tin của tôi trong nhánh master
trông như thế nào:
Bước 2. Gộp nhánh.
Chúng ta sẽ nhập các thay đổi trong nhánh test
vào nhánh hiện tại
(master)
.
Để làm điều này, chúng ta cũng sử dụng menu phía trên và lệnh «Merge ‘test’
into ‘master’»
.
Bước 3. Kiểm tra kết quả:.
Kiểm tra:
- Phía trên vẫn hiển thị nhánh
master
- Chúng ta có hai tập tin: init.py và main.py
-
Tập tin main.py chứa mã mà đã được thêm vào trong nhánh
test
.
11.5 Xung đột khi gộp
Đôi khi xung đột xảy ra khi gộp nhánh.
Nếu bạn thực hiện những thay đổi trong một tệp trong các nhánh khác nhau và cố gắng gộp chúng, có thể xảy ra xung đột.
Xung đột tệp văn bản
Git — là một hệ thống rất thông minh, nó hiểu loại tệp. Nếu bạn thực hiện các thay đổi ở các vị trí khác nhau của những tệp mà nó coi là văn bản, thì nó chỉ cần chuyển các thay đổi từ một tệp sang tệp khác vào đúng vị trí, giống như người làm.
Xung đột tệp nhị phân
Nhưng nếu bạn thực hiện những thay đổi trong hình ảnh hoặc tài liệu, Git sẽ không cố gắng gộp các phần của chúng thành một tệp, nó chỉ đề nghị bạn chọn phiên bản tệp nào bạn muốn giữ trong nhánh hiện tại.
Giải quyết xung đột thủ công:
Nếu bạn thực hiện thay đổi ở cùng một vị trí của tệp văn bản, Git sẽ không thể gộp đúng các phiên bản khác nhau và sẽ đề nghị bạn làm điều đó.
Đây là cách nó có thể trông như thế nào:
Bạn thấy gì ở đây:
- Bên trái là nội dung của tệp main.py của nhánh master
- Bên phải là nội dung của tệp main.py của nhánh
test
-
Ở giữa PyCharm đề nghị bạn viết phiên bản mã cuối cùng
(bạn có thể nhấp vào các nút
«>>»
và«<<»
, để tự động chèn các thay đổi từ một trong các tệp).
Tôi đã chọn phương án master
và đã viết mã bằng tay. Đây là kết quả của tôi.
11.6 Lịch sử thay đổi
Một điều hữu ích và thú vị khác: bạn có thể kiểm tra lịch sử
thay đổi bất kỳ tệp nào, bằng cách nhấp vào nút Show
History
. Có hai vị trí mà nó có thể nằm — hãy tìm nó.
Đây là cách lịch sử thay đổi xuất hiện đối với tôi cho tệp main.py:
Giải thích:
-
Bên trái bạn thấy lịch sử thay đổi của tệp cụ thể:
- Thay đổi mới hơn thì nằm ở trên; càng cũ thì càng ở dưới.
- Tại đây cũng hiển thị lịch sử hợp nhất nhánh.
- Bên phải — là những thay đổi đã được thực hiện trong commit cụ thể.
GO TO FULL VERSION