Git là một hệ thống quản lý phiên bản (VCS) phổ biến được dùng trong phát triển phần mềm để theo dõi các thay đổi của tệp theo thời gian. Nó hỗ trợ cộng tác bằng cách cho phép các nhà phát triển làm việc đồng thời mà không ghi đè lẫn nhau. Vì tất cả nhà phát triển đều giữ bản sao cục bộ đầy đủ lịch sử dự án, mỗi người có thể làm việc độc lập ngoại tuyến và hợp nhất thay đổi của mình một cách an toàn khi sẵn sàng.
Một kho lưu trữ từ xa (remote) là một phiên bản dự án Git của bạn được lưu trữ trên đám mây thông qua dịch vụ như GitHub hoặc BitBucket.
Một Git remote cung cấp một vị trí tập trung nơi một kho có thể được lưu trữ, chia sẻ và truy cập bởi người khác. Người dùng có thể đẩy (push) thay đổi cục bộ của họ lên remote và kéo (pull) các cập nhật do đồng đội thực hiện từ remote. Remote cũng hữu ích để sao lưu mã và triển khai mã lên môi trường sản xuất.
Một kho lưu trữ cục bộ nằm trên máy tính của bạn, vì vậy bạn có thể viết mã, tạo commit và kiểm thử thay đổi tại chỗ. Một kho lưu trữ từ xa, đặt trên mạng, dùng để chia sẻ mã, cộng tác với người khác và sao lưu công việc của bạn. Trong bài này, chúng ta sẽ xem cách đồng bộ thay đổi giữa kho cục bộ và kho từ xa bằng các lệnh Git.
Quy trình làm việc với Git
Một quy trình Git điển hình bắt đầu bằng việc “nhân bản” (clone) một kho từ xa về máy cục bộ. Sau khi clone, bạn có thể tạo một nhánh mới để làm một tính năng hoặc sửa lỗi, chỉnh sửa và commit các thay đổi cục bộ.
Khi hoàn tất, bạn “đẩy” (push) nhánh lên remote và mở một pull request để được xem xét. Sau khi được duyệt, hợp nhất (merge) các thay đổi vào nhánh chính.
Xuyên suốt quá trình, bạn thường xuyên “kéo” (pull) các cập nhật để giữ kho cục bộ đồng bộ với remote.
Giả sử bạn muốn tạo một bản sao của một kho từ xa, quá trình này gọi là “clone” kho. Với bản sao cục bộ, bạn có thể sửa mã và thử nghiệm tính năng mới.
Để dùng Git, hãy đảm bảo đã cài đặt, sau đó mở terminal và dùng lệnh: git clone <URL>.
Ví dụ, để clone dự án tên “project” từ trang GitHub với tên người dùng “datacamp”, hãy dùng
git clone https://github.com/datacamp/project.gitĐược hỗ trợ bởi
Remote mặc định: 'origin'
Khi bạn clone một kho, Git sẽ tạo một remote mặc định tên là origin. Nhãn origin này đóng vai trò alias cho URL của kho bạn đã clone.
Trong các quy trình Git điển hình, khi bạn chạy lệnh như git push hoặc git pull, Git giả định bạn đang ám chỉ đến origin trừ khi bạn chỉ định remote khác. Điều này đơn giản hóa việc đồng bộ thay đổi giữa bản sao cục bộ và kho chia sẻ. Chúng ta sẽ xem kỹ hơn thao tác push và pull ở phần sau của bài.
Quản lý Git Remote
Các tác vụ quản lý remote phổ biến gồm xem các remote hiện có bằng git remote và thêm một remote mới với git remote add.
Bạn có thể muốn kết nối kho cục bộ với một remote khác. Chẳng hạn, nếu bạn đã fork một dự án, bạn có thể muốn theo dõi thay đổi ở kho gốc ngoài các thay đổi ở remote main. Hoặc bạn muốn đẩy mã lên nhiều nền tảng như GitHub và GitLab.
Để thêm remote mới, dùng lệnh git remote add <name> <URL>. Hãy thêm một remote tên new_remote.
git remote add new_remote https://github.com/datacamp/projectĐược hỗ trợ bởi
Đặt tên cho remote giúp bạn không phải nhập lại URL nhiều lần khi hợp nhất.
Đổi tên và xóa remote
Đổi tên một remote rất đơn giản. Dùng lệnh git remote rename <old-name> <new-name>. Ví dụ,
Một nhánh trong Git là một nhánh làm việc độc lập với main, cho phép bạn thực hiện thay đổi tách biệt với phiên bản chính của dự án. Khi hoàn tất và được xem xét, bạn có thể hợp nhất nhánh trở lại dự án chính.
Hãy diễn giải kết quả. Dòng origin/main cho biết có một nhánh từ xa tên main trên remote origin. Dòng origin/HEAD -> origin/main cho thấy nhánh mặc định trên remote là origin/main. Vậy, kết quả này cho bạn biết main là nhánh mặc định trên remote origin, và hiện đây là nhánh từ xa duy nhất được liệt kê.
Theo dõi một nhánh từ xa
Bạn thường sẽ muốn kết nối một nhánh cục bộ với một nhánh từ xa để giữ mã đồng bộ. Khi một nhánh cục bộ theo dõi (track) một nhánh từ xa, bạn có thể pull và push thay đổi mà không cần chỉ định remote và tên nhánh mỗi lần.
Git cũng theo dõi số commit nhánh cục bộ của bạn đi trước hoặc tụt sau so với nhánh từ xa, giúp quản lý thay đổi dễ dàng hơn.
Lệnh git checkout --track origin/<branch-name> tạo một nhánh cục bộ mới để theo dõi nhánh từ xa được chỉ định. Nó thiết lập một nhánh cục bộ cùng tên với <branch-name> và liên kết với phiên bản từ xa. Nhờ vậy, các lệnh git pull và git push trong tương lai sẽ tự động tương tác với đúng nhánh từ xa. Bạn có thể tìm hiểu thêm về Git Push và Pull trong hướng dẫn của chúng tôi.
Fetch và pull từ remote
Để giữ nhánh cục bộ đồng bộ với thay đổi của người khác, bạn cần kéo nội dung về nhánh cục bộ. “Pull” nghĩa là tải về các thay đổi mới nhất từ nhánh tương ứng trên remote và hợp nhất các thay đổi đó vào phiên bản cục bộ của nhánh. Điều này đảm bảo bạn làm việc với mã mới nhất.
Giả sử chúng ta muốn kéo tất cả nhánh từ remote tên origin. Thao tác này dùng lệnh git fetch origin. Nếu chỉ muốn fetch một nhánh cụ thể, như main, hãy chỉ định như git fetch origin main.
Sau khi fetch, bạn vẫn cần đồng bộ nội dung bằng cách hợp nhất các thay đổi đã fetch vào nhánh cục bộ hiện tại. Để làm vậy, chạy git merge origin/<branch-name>, thay <branch-name> bằng tên nhánh bạn đã fetch. Ví dụ, để hợp nhất thay đổi từ nhánh main trên remote, bạn dùng git merge origin/main.
Vì việc fetch và merge thường diễn ra liên tiếp, Git cung cấp một lệnh thực hiện cả hai: git pull. Ví dụ, để fetch và merge thay đổi từ nhánh main trên remote tên origin, bạn có thể dùng git pull origin main.
Khi nào nên dùng fetch và merge và khi nào nên dùng pull? Quy trình hai bước fetch và merge cho bạn nhiều quyền kiểm soát hơn đối với cập nhật. Fetch cho phép bạn xem có gì thay đổi trên remote trước khi hợp nhất vào nhánh cục bộ. Điều này hữu ích nếu bạn muốn rà soát cập nhật, so sánh khác biệt hoặc xử lý xung đột cẩn thận.
Dùng pull khi bạn tự tin rằng thay đổi trên remote an toàn để hợp nhất ngay và bạn muốn cập nhật nhánh nhanh chóng. Nó tiện lợi và gộp cả hai bước làm một, nhưng cho bạn ít khả năng quan sát trước khi việc merge diễn ra.
Push lên kho từ xa
“Push” nội dung từ nhánh cục bộ lên remote nghĩa là bạn đang gửi các thay đổi cục bộ lên nhánh tương ứng trên kho từ xa. Điều này cập nhật remote với công việc mới nhất của bạn để người khác có thể xem, pull hoặc phát triển tiếp. Push giúp chia sẻ đóng góp của bạn và giữ kho từ xa được cập nhật cho mọi người trong dự án.
Tải các thay đổi cục bộ lên remote gồm ba bước.
1. Dùng git add để đưa các tệp vào vùng chuẩn bị (stage). Để thêm mọi thay đổi, dùng
Hãy xem một số ví dụ thực tế: clone một kho và cộng tác với nhiều remote.
Clone một kho lưu trữ
Dưới đây là hướng dẫn từng bước để clone một kho.
Lấy URL của kho. Sao chép URL của kho bạn muốn clone. URL này có trên nhà cung cấp đám mây của bạn, như GitHub hoặc BitBucket.
Chọn thư mục. Đi tới thư mục trên máy tính nơi bạn muốn sao chép kho về.
Clone kho. Chạy lệnh git clone <URL>. Ví dụ, chạygit clone https://github.com/datacamp/project.Lệnh này tạo một thư mục mới tên project chứa nội dung của kho.
Liệt kê các remote đã cấu hình. Sau khi clone, kiểm tra các remote với lệnh git remote.Trong ví dụ của chúng ta, bạn sẽ thấy origin, là tên mặc định Git gán cho remote bạn đã clone và URL của nó.
Cộng tác với nhiều remote
Khi đóng góp cho dự án mã nguồn mở hoặc cộng tác thông qua bản sao cá nhân (fork), việc làm với hai remote là phổ biến: origin, là fork của bạn, và upstream, là kho bạn đã fork. Thông thường, bạn có quyền ghi lên origin nhưng không có trên upstream.
Có một số thực hành tốt để quản lý nhiều remote mà bạn nên lưu ý.
Thêm remote upstream.Sau khi clone fork của bạn, hãy theo dõi kho gốc là upstream: git remote add upstream <URL>.
Giữ fork của bạn luôn cập nhật. Thường xuyên fetch thay đổi từ kho upstream bằng lệnh git fetch upstream. Sau đó merge hoặc rebase các thay đổi đó vào nhánh cục bộ của bạn.
Tránh push lên kho upstream.Thông thường bạn không có (hoặc không cần) quyền push lên kho upstream. Mọi thay đổi của bạn nên được push lên origin và tạo pull request từ đó.
Dùng tên nhánh có tính mô tả. Giữ các nhánh cục bộ gọn gàng. Nên đặt tên theo tính năng hoặc issue bạn đang làm.
Kiểm tra các remote. Dùng git remote -v để xem lại cấu hình remote và xác nhận URL cho origin và upstream là chính xác.
Đồng bộ trước khi làm việc. Trước khi bắt đầu công việc mới, luôn pull các thay đổi mới nhất từ upstream vào nhánh chính của bạn để luôn cập nhật và tránh xung đột sau này.
Thực hành tốt và mẹo với Git Remote
Dưới đây là một số thực hành tốt bạn nên tuân theo khi dùng Git remote:
Giữ remote luôn cập nhật
Thường xuyên fetch thay đổi giúp đảm bảo bản sao cục bộ của bạn luôn cập nhật với phiên bản trên remote. Bằng cách chạy git fetch, bạn tải về mọi thay đổi mới từ remote mà không ảnh hưởng đến nhánh hiện tại.
Điều này giúp bạn nắm được đồng nghiệp đã push gì, cho phép bạn so sánh thay đổi và chuẩn bị cho các cập nhật hoặc merge cần thiết. Fetch đều đặn giảm khả năng xung đột và giúp quy trình cộng tác vận hành trơn tru.
Theo thời gian, khi các nhánh bị xóa khỏi kho từ xa, thiết lập Git cục bộ của bạn vẫn có thể hiển thị các nhánh cũ dưới dạng nhánh theo dõi từ xa. Đây được gọi là nhánh theo dõi “cũ” (stale).
Để dọn dẹp các nhánh, chạy git remote prune origin để xóa những nhánh theo dõi từ xa không còn tồn tại trên remote origin.
Thực hiện điều này thường xuyên giúp kho cục bộ của bạn gọn gàng, dễ tìm nhánh liên quan và đảm bảo bạn không tham chiếu đến công việc lỗi thời.
Xử lý xung đột với remote
Xung đột trên remote có thể khó giải quyết. Cách tốt nhất là phòng tránh bằng cách đảm bảo không có nhiều người cùng sửa một phần mã tại cùng thời điểm. Tuy vậy, điều này không phải lúc nào cũng khả thi.
Dù có cố gắng, xung đột vẫn có thể xảy ra. Khi xảy ra, hãy làm theo kế hoạch này để xử lý hiệu quả.
Dùng git status để xem những xung đột nào cần bạn xử lý.
Mở các tệp bị xung đột và chỉnh sửa để giải quyết khác biệt.
Dùng công cụ hợp nhất (merge tool). Các công cụ như VS Code hoặc git mergetool hiển thị so sánh song song và cho phép bạn chọn phiên bản mã cần giữ.
Trao đổi với nhóm. Nếu xung đột không rõ ràng, hãy trao đổi với đồng nghiệp trước khi xử lý. Đảm bảo bạn hiểu dòng nào cần giữ, dòng nào cần bỏ.
Kiểm thử mã sau khi giải quyết xung đột để đảm bảo mọi thứ vẫn hoạt động như mong đợi.
Commit thay đổi của bạn. Sau khi giải quyết tất cả xung đột, stage các tệp và tạo commit để hoàn tất việc merge.
Rebase
Dùng git pull --rebase có thể giảm khả năng xảy ra xung đột hợp nhất phức tạp bằng cách áp các thay đổi của bạn lên trên các commit mới nhất từ remote.
Khi bạn dùng git pull --rebase, Git trước tiên fetch các thay đổi mới nhất từ remote, sau đó áp các commit cục bộ của bạn lên trên như thể công việc của bạn diễn ra sau đó.
Cách tiếp cận này giúp tạo lịch sử commit gọn gàng, tuyến tính và có thể giảm khả năng xung đột merge rối rắm.
Thay vì tạo một merge commit kết hợp lịch sử, rebase khiến cho trông như các thay đổi của bạn được thực hiện sau các cập nhật từ remote. Bạn có thể tìm hiểu thêm trong hướng dẫn Git Rebase.
Kết luận
Git remote đóng vai trò then chốt trong phát triển cộng tác, kết nối kho cục bộ với codebase dùng chung. Trong hướng dẫn này, chúng ta đã điểm qua các thao tác remote thiết yếu, gồm thiết lập, đồng bộ thông qua các lệnh fetch, pull, push, và quản lý nhiều kết nối remote.
Nắm vững các khái niệm đã trình bày sẽ giúp bạn cộng tác hiệu quả hơn, duy trì lịch sử dự án rõ ràng và đóng góp tốt cho đội ngũ phát triển.
Để biết thêm thông tin liên quan đến các nhánh remote của git, hãy xem các tài nguyên của DataCamp.
Git là một hệ thống quản lý phiên bản (VCS) phổ biến được dùng trong phát triển phần mềm để theo dõi các thay đổi của tệp theo thời gian. Nó hỗ trợ cộng tác bằng cách cho phép các nhà phát triển làm việc đồng thời mà không ghi đè lẫn nhau. Vì tất cả nhà phát triển đều giữ bản sao cục bộ đầy đủ lịch sử dự án, mỗi người có thể làm việc độc lập ngoại tuyến và hợp nhất thay đổi của mình một cách an toàn khi sẵn sàng.
Một kho lưu trữ từ xa (remote) là một phiên bản dự án Git của bạn được lưu trữ trên đám mây thông qua dịch vụ như GitHub hoặc BitBucket.
Bài viết này sẽ tìm hiểu chi tiết hơn về Git remote. Nếu bạn mới bắt đầu với Git, hãy đọc hướng dẫn Git cho người mới bắt đầu.
Git Remote là gì?
Một Git remote cung cấp một vị trí tập trung nơi một kho có thể được lưu trữ, chia sẻ và truy cập bởi người khác. Người dùng có thể đẩy (push) thay đổi cục bộ của họ lên remote và kéo (pull) các cập nhật do đồng đội thực hiện từ remote. Remote cũng hữu ích để sao lưu mã và triển khai mã lên môi trường sản xuất.
Một kho lưu trữ cục bộ nằm trên máy tính của bạn, vì vậy bạn có thể viết mã, tạo commit và kiểm thử thay đổi tại chỗ. Một kho lưu trữ từ xa, đặt trên mạng, dùng để chia sẻ mã, cộng tác với người khác và sao lưu công việc của bạn. Trong bài này, chúng ta sẽ xem cách đồng bộ thay đổi giữa kho cục bộ và kho từ xa bằng các lệnh Git.
Quy trình làm việc với Git
Một quy trình Git điển hình bắt đầu bằng việc “nhân bản” (clone) một kho từ xa về máy cục bộ. Sau khi clone, bạn có thể tạo một nhánh mới để làm một tính năng hoặc sửa lỗi, chỉnh sửa và commit các thay đổi cục bộ.
Khi hoàn tất, bạn “đẩy” (push) nhánh lên remote và mở một pull request để được xem xét. Sau khi được duyệt, hợp nhất (merge) các thay đổi vào nhánh chính.
Xuyên suốt quá trình, bạn thường xuyên “kéo” (pull) các cập nhật để giữ kho cục bộ đồng bộ với remote.
Một quy trình Git điển hình (Hình từ khóa học Introduction to Git)
Hãy xem chi tiết quá trình này.
Clone một kho
Giả sử bạn muốn tạo một bản sao của một kho từ xa, quá trình này gọi là “clone” kho. Với bản sao cục bộ, bạn có thể sửa mã và thử nghiệm tính năng mới.
Để dùng Git, hãy đảm bảo đã cài đặt, sau đó mở terminal và dùng lệnh:
git clone <URL>.Ví dụ, để clone dự án tên “project” từ trang GitHub với tên người dùng “datacamp”, hãy dùng
Remote mặc định: 'origin'
Khi bạn clone một kho, Git sẽ tạo một remote mặc định tên là
origin. Nhãnoriginnày đóng vai trò alias cho URL của kho bạn đã clone.Trong các quy trình Git điển hình, khi bạn chạy lệnh như
git pushhoặcgit pull, Git giả định bạn đang ám chỉ đếnorigintrừ khi bạn chỉ định remote khác. Điều này đơn giản hóa việc đồng bộ thay đổi giữa bản sao cục bộ và kho chia sẻ. Chúng ta sẽ xem kỹ hơn thao tác push và pull ở phần sau của bài.Quản lý Git Remote
Các tác vụ quản lý remote phổ biến gồm xem các remote hiện có bằng
git remotevà thêm một remote mới vớigit remote add.Xem các remote hiện có
Để xem các remote hiện có, dùng lệnh
git remote.Trong ví dụ của chúng ta, alias remote
originđược liệt kê nhưng không hiển thị URL. Nếu muốn xem URL gắn với mỗi remote, dùng cờ-v.Thêm một remote mới
Bạn có thể muốn kết nối kho cục bộ với một remote khác. Chẳng hạn, nếu bạn đã fork một dự án, bạn có thể muốn theo dõi thay đổi ở kho gốc ngoài các thay đổi ở remote
main. Hoặc bạn muốn đẩy mã lên nhiều nền tảng như GitHub và GitLab.Để thêm remote mới, dùng lệnh
git remote add <name> <URL>. Hãy thêm một remote tênnew_remote.Đặt tên cho remote giúp bạn không phải nhập lại URL nhiều lần khi hợp nhất.
Đổi tên và xóa remote
Đổi tên một remote rất đơn giản. Dùng lệnh
git remote rename <old-name> <new-name>. Ví dụ,Để xác nhận remote đã được đổi tên, liệt kê các remote với
git remote.Để xóa một remote, dùng
git remote remove <name>. Với ví dụ của chúng ta:Bây giờ, liệt kê các remote để kiểm tra.
Ta thấy remote duy nhất là
origin.Làm việc với nhánh từ xa
Một nhánh trong Git là một nhánh làm việc độc lập với
main, cho phép bạn thực hiện thay đổi tách biệt với phiên bản chính của dự án. Khi hoàn tất và được xem xét, bạn có thể hợp nhất nhánh trở lại dự án chính.Liệt kê các nhánh từ xa
Để liệt kê nhánh từ xa, dùng lệnh
git branch -r.Hãy diễn giải kết quả. Dòng
origin/maincho biết có một nhánh từ xa tênmaintrên remoteorigin. Dòngorigin/HEAD -> origin/maincho thấy nhánh mặc định trên remote làorigin/main. Vậy, kết quả này cho bạn biếtmainlà nhánh mặc định trên remoteorigin, và hiện đây là nhánh từ xa duy nhất được liệt kê.Theo dõi một nhánh từ xa
Bạn thường sẽ muốn kết nối một nhánh cục bộ với một nhánh từ xa để giữ mã đồng bộ. Khi một nhánh cục bộ theo dõi (track) một nhánh từ xa, bạn có thể pull và push thay đổi mà không cần chỉ định remote và tên nhánh mỗi lần.
Git cũng theo dõi số commit nhánh cục bộ của bạn đi trước hoặc tụt sau so với nhánh từ xa, giúp quản lý thay đổi dễ dàng hơn.
Lệnh
git checkout --track origin/<branch-name>tạo một nhánh cục bộ mới để theo dõi nhánh từ xa được chỉ định. Nó thiết lập một nhánh cục bộ cùng tên với<branch-name>và liên kết với phiên bản từ xa. Nhờ vậy, các lệnhgit pullvàgit pushtrong tương lai sẽ tự động tương tác với đúng nhánh từ xa. Bạn có thể tìm hiểu thêm về Git Push và Pull trong hướng dẫn của chúng tôi.Fetch và pull từ remote
Để giữ nhánh cục bộ đồng bộ với thay đổi của người khác, bạn cần kéo nội dung về nhánh cục bộ. “Pull” nghĩa là tải về các thay đổi mới nhất từ nhánh tương ứng trên remote và hợp nhất các thay đổi đó vào phiên bản cục bộ của nhánh. Điều này đảm bảo bạn làm việc với mã mới nhất.
Giả sử chúng ta muốn kéo tất cả nhánh từ remote tên
origin. Thao tác này dùng lệnhgit fetch origin. Nếu chỉ muốn fetch một nhánh cụ thể, nhưmain, hãy chỉ định nhưgit fetch origin main.Sau khi fetch, bạn vẫn cần đồng bộ nội dung bằng cách hợp nhất các thay đổi đã fetch vào nhánh cục bộ hiện tại. Để làm vậy, chạy
git merge origin/<branch-name>, thay<branch-name>bằng tên nhánh bạn đã fetch. Ví dụ, để hợp nhất thay đổi từ nhánhmaintrên remote, bạn dùnggit merge origin/main.Vì việc fetch và merge thường diễn ra liên tiếp, Git cung cấp một lệnh thực hiện cả hai:
git pull. Ví dụ, để fetch và merge thay đổi từ nhánhmaintrên remote tênorigin, bạn có thể dùnggit pull origin main.Khi nào nên dùng
fetchvàmergevà khi nào nên dùngpull? Quy trình hai bướcfetchvàmergecho bạn nhiều quyền kiểm soát hơn đối với cập nhật. Fetch cho phép bạn xem có gì thay đổi trên remote trước khi hợp nhất vào nhánh cục bộ. Điều này hữu ích nếu bạn muốn rà soát cập nhật, so sánh khác biệt hoặc xử lý xung đột cẩn thận.Dùng
pullkhi bạn tự tin rằng thay đổi trên remote an toàn để hợp nhất ngay và bạn muốn cập nhật nhánh nhanh chóng. Nó tiện lợi và gộp cả hai bước làm một, nhưng cho bạn ít khả năng quan sát trước khi việc merge diễn ra.Push lên kho từ xa
“Push” nội dung từ nhánh cục bộ lên remote nghĩa là bạn đang gửi các thay đổi cục bộ lên nhánh tương ứng trên kho từ xa. Điều này cập nhật remote với công việc mới nhất của bạn để người khác có thể xem, pull hoặc phát triển tiếp. Push giúp chia sẻ đóng góp của bạn và giữ kho từ xa được cập nhật cho mọi người trong dự án.
Tải các thay đổi cục bộ lên remote gồm ba bước.
1. Dùng
git addđể đưa các tệp vào vùng chuẩn bị (stage). Để thêm mọi thay đổi, dùngĐể thêm một tệp cụ thể, hãy chỉ định tên tệp.
2. Commit thay đổi của bạn. Thêm một thông điệp mô tả những gì bạn đã làm.
3. Push lên remote.
Ví dụ thực tiễn
Hãy xem một số ví dụ thực tế: clone một kho và cộng tác với nhiều remote.
Clone một kho lưu trữ
Dưới đây là hướng dẫn từng bước để clone một kho.
git clone <URL>. Ví dụ, chạygit clone https://github.com/datacamp/project.Lệnh này tạo một thư mục mới tên project chứa nội dung của kho.git remote.Trong ví dụ của chúng ta, bạn sẽ thấyorigin, là tên mặc định Git gán cho remote bạn đã clone và URL của nó.Cộng tác với nhiều remote
Khi đóng góp cho dự án mã nguồn mở hoặc cộng tác thông qua bản sao cá nhân (fork), việc làm với hai remote là phổ biến:
origin, là fork của bạn, vàupstream, là kho bạn đã fork. Thông thường, bạn có quyền ghi lênoriginnhưng không có trênupstream.Có một số thực hành tốt để quản lý nhiều remote mà bạn nên lưu ý.
upstream. Sau khi clone fork của bạn, hãy theo dõi kho gốc là upstream:git remote add upstream <URL>.upstream. Thông thường bạn không có (hoặc không cần) quyền push lên kho upstream. Mọi thay đổi của bạn nên được push lênoriginvà tạo pull request từ đó.git remote -vđể xem lại cấu hình remote và xác nhận URL chooriginvàupstreamlà chính xác.Thực hành tốt và mẹo với Git Remote
Dưới đây là một số thực hành tốt bạn nên tuân theo khi dùng Git remote:
Giữ remote luôn cập nhật
Thường xuyên fetch thay đổi giúp đảm bảo bản sao cục bộ của bạn luôn cập nhật với phiên bản trên remote. Bằng cách chạy
git fetch, bạn tải về mọi thay đổi mới từ remote mà không ảnh hưởng đến nhánh hiện tại.Điều này giúp bạn nắm được đồng nghiệp đã push gì, cho phép bạn so sánh thay đổi và chuẩn bị cho các cập nhật hoặc merge cần thiết. Fetch đều đặn giảm khả năng xung đột và giúp quy trình cộng tác vận hành trơn tru.
Theo thời gian, khi các nhánh bị xóa khỏi kho từ xa, thiết lập Git cục bộ của bạn vẫn có thể hiển thị các nhánh cũ dưới dạng nhánh theo dõi từ xa. Đây được gọi là nhánh theo dõi “cũ” (stale).
Để dọn dẹp các nhánh, chạy
git remote prune originđể xóa những nhánh theo dõi từ xa không còn tồn tại trên remoteorigin.Thực hiện điều này thường xuyên giúp kho cục bộ của bạn gọn gàng, dễ tìm nhánh liên quan và đảm bảo bạn không tham chiếu đến công việc lỗi thời.
Xử lý xung đột với remote
Xung đột trên remote có thể khó giải quyết. Cách tốt nhất là phòng tránh bằng cách đảm bảo không có nhiều người cùng sửa một phần mã tại cùng thời điểm. Tuy vậy, điều này không phải lúc nào cũng khả thi.
Dù có cố gắng, xung đột vẫn có thể xảy ra. Khi xảy ra, hãy làm theo kế hoạch này để xử lý hiệu quả.
git statusđể xem những xung đột nào cần bạn xử lý.git mergetoolhiển thị so sánh song song và cho phép bạn chọn phiên bản mã cần giữ.Rebase
Dùng
git pull --rebasecó thể giảm khả năng xảy ra xung đột hợp nhất phức tạp bằng cách áp các thay đổi của bạn lên trên các commit mới nhất từ remote.Khi bạn dùng
git pull --rebase, Git trước tiên fetch các thay đổi mới nhất từ remote, sau đó áp các commit cục bộ của bạn lên trên như thể công việc của bạn diễn ra sau đó.Cách tiếp cận này giúp tạo lịch sử commit gọn gàng, tuyến tính và có thể giảm khả năng xung đột merge rối rắm.
Thay vì tạo một merge commit kết hợp lịch sử, rebase khiến cho trông như các thay đổi của bạn được thực hiện sau các cập nhật từ remote. Bạn có thể tìm hiểu thêm trong hướng dẫn Git Rebase.
Kết luận
Git remote đóng vai trò then chốt trong phát triển cộng tác, kết nối kho cục bộ với codebase dùng chung. Trong hướng dẫn này, chúng ta đã điểm qua các thao tác remote thiết yếu, gồm thiết lập, đồng bộ thông qua các lệnh fetch, pull, push, và quản lý nhiều kết nối remote.
Nắm vững các khái niệm đã trình bày sẽ giúp bạn cộng tác hiệu quả hơn, duy trì lịch sử dự án rõ ràng và đóng góp tốt cho đội ngũ phát triển.
Để biết thêm thông tin liên quan đến các nhánh remote của git, hãy xem các tài nguyên của DataCamp.