Courses
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn quy trình sử dụng các lệnh Git push và pull, cũng như tạo pull request thông qua cả GitHub Desktop và dòng lệnh. Hướng dẫn này hữu ích cho bất kỳ ai quản lý kho mã nguồn.
Bạn có thể làm theo tất cả nội dung trong hướng dẫn này, ngay cả khi bạn là người mới bắt đầu. Tuy nhiên, nếu bạn mới sử dụng Git, hãy xem Hướng dẫn GitHub và Git cho Người mới bắt đầu của chúng tôi và thiết lập môi trường bằng hướng dẫn cài đặt Git.
Git Push và Git Pull là gì?
Ở mức khái quát, sự khác nhau như sau:
git push tải các commit cục bộ của bạn lên kho lưu trữ từ xa như GitHub, trong khi git pull tải các thay đổi từ kho lưu trữ từ xa và hợp nhất chúng vào nhánh cục bộ của bạn. Cả hai lệnh đều có thể được sử dụng qua dòng lệnh hoặc GitHub Desktop.
Lưu ý: Pull request là một tính năng của GitHub dùng để đề xuất và xem xét thay đổi trước khi hợp nhất — nó không giống với git pull.
Để đẩy (push) các commit từ một nhánh cục bộ lên kho từ xa, dùng:
git push <remote_name> <branch_name>
Lưu ý khác: GitHub không còn hỗ trợ xác thực bằng mật khẩu. Hãy dùng khóa SSH hoặc personal access token.
Đẩy (Pushing) lên GitHub
Hãy bắt đầu với khái niệm push.
Sử dụng Dòng lệnh để Push lên GitHub
Cách học tốt nhất là thực hành, vì vậy hãy đi qua từng bước.
1. Tạo một repository mới
Bạn cần tạo một repository mới và nhấp vào dấu cộng.
Điền tất cả thông tin yêu cầu, tức là tên repository, mô tả và đặt repository ở chế độ công khai lần này vì nó miễn phí.

2. Mở Git Bash của bạn
Git Bash có thể tải xuống tại đây, là một shell dùng để tương tác với hệ điều hành, tuân theo các lệnh UNIX.
3. Tạo dự án cục bộ trên máy tính, trỏ tới thư mục làm việc hiện tại
pwd là viết tắt của 'print working directory', dùng để in ra thư mục hiện tại.
Di chuyển đến đường dẫn cụ thể trên máy tính cục bộ bằng cd 'path_name'. Lệnh cd là 'change directory' và được dùng để chuyển thư mục làm việc trong hệ điều hành; để định vị tệp của bạn, cần cung cấp 'path_name', ví dụ C:/Users/Dell/Downloads/FaceDetect-main. Lệnh này giúp xác định tệp bạn cần làm việc.
4. Khởi tạo repository git
Dùng git init để khởi tạo repository. Thao tác này tạo một repository trống mới với thư mục ẩn .git ở cấp cao nhất của dự án, nơi tập trung toàn bộ thông tin phiên bản.

5. Thêm tệp vào repository cục bộ mới
Dùng git add . để stage tất cả tệp trong thư mục hiện tại. Dùng git status để xem tệp nào đã được stage và sẵn sàng cho commit đầu tiên.

6. Commit các tệp đã stage trong repository cục bộ bằng cách viết thông điệp commit
Bạn có thể tạo thông điệp commit bằng git commit -m 'your message', lệnh này ghi nhận các thay đổi đã stage vào repository cục bộ. git commit dùng cờ -m để thêm thông điệp, nội dung mô tả đầy đủ, viết theo lối mệnh lệnh, tối đa 50 ký tự, nêu rõ "đã thay đổi gì" và "vì sao thay đổi".

7. Sao chép URL repository từ xa của bạn từ GitHub
Sao chép HTTPS hoặc URL từ tài khoản GitHub, đây là vị trí của repository từ xa.

8. Thêm URL đã sao chép (repository từ xa), nơi nội dung cục bộ từ repository của bạn sẽ được push tới
git remote add origin 'your_url_name'
Trong đoạn mã trên, origin là tên remote, và URL remote là "https://github.com/Olivia-Smithcoder100/FaceDetection.git". Ở đây có thể hiểu remote là GitHub, và GitHub cung cấp URL để thêm vào repository từ xa.
9. Đẩy mã trong repository cục bộ của bạn lên GitHub
git push -u origin main được dùng để push nội dung cục bộ lên GitHub.
Trong lệnh, origin là tên mặc định của repository từ xa và cờ -u là upstream, tương đương -set-upstream. main là nhánh. name.upstream là repository mà từ đó chúng ta đã clone dự án.
Xác thực bằng thông tin đăng nhập GitHub của bạn. Lưu ý rằng GitHub không còn hỗ trợ xác thực bằng mật khẩu cho các thao tác Git. Bạn sẽ cần dùng personal access token (PAT) hoặc khóa SSH.

10. Xem các tệp trong repository của bạn được lưu trữ trên GitHub
Cuối cùng bạn có thể thấy tệp được lưu trên GitHub.

Sử dụng GitHub Desktop để Push lên GitHub
GitHub Desktop có sẵn để tải xuống cho mọi hệ điều hành, cung cấp giao diện GUI (Giao diện đồ họa) để đẩy nội dung từ repository cục bộ của bạn lên một repository từ xa như GitHub.
Bạn cần mở tài khoản GitHub của mình trên trình duyệt và quy trình tạo repository mới, tức là bước 1, giống như đã nêu ở phần "Sử dụng dòng lệnh để PUSH lên GitHub".
1. Nhấp "Set up in a Desktop"
Bạn cần nhấp vào nút như bên dưới, nơi xuất hiện một cửa sổ bật lên, và bạn chọn "Open GitHub desktop".

2. Nhân bản (Cloning) trong GitHub Desktop
Bạn có thể nhấp nút Clone như bên dưới.
Sau khi nhân bản, một thư mục được tạo trên máy tính cục bộ, trong đó cũng có thư mục ẩn .git. 
3. Sao chép tất cả tệp cần thiết từ máy cục bộ vào thư mục clone trên máy
Bạn cần sao chép tất cả tệp cần thiết, hình ảnh, tệp README, v.v., vào thư mục clone.

4. Chuyển sang GitHub Desktop và commit vào main
Bạn có thể thấy các tệp đã thêm vào thư mục clone cũng xuất hiện trong GitHub Desktop. Cuối cùng, viết thông điệp và nhấn Commit to main.

5. Publish branch trong GitHub Desktop để tải tất cả tệp của bạn lên GitHub
Bạn có thể nhấp Publish Branch để xuất bản toàn bộ nội dung cục bộ lên GitHub.

Bạn có thể xem repository của mình trên GitHub sau khi hoàn tất các bước.
Git PULL Request
Pull request là một tính năng của GitHub cho phép bạn thông báo cho người duy trì dự án về các thay đổi bạn đã push lên một repository. Nó không giống với lệnh git pull—pull request là cách để đề xuất và xem xét thay đổi trước khi chúng được hợp nhất vào nhánh chính.
Lệnh đơn giản để pull từ một nhánh là:
git pull 'remote_name' 'branch_name'
Lệnh git pull là sự kết hợp của git fetch (lấy các commit mới nhất về repository cục bộ) và git merge (hợp nhất nhánh từ xa vào nhánh cục bộ). Ngoài ra, remote_name là tên repository và branch_name là tên nhánh cụ thể.
Bạn sẽ xem hai cách khác nhau để sử dụng yêu cầu PULL.
PULL Request qua Dòng lệnh
Bạn có thể thấy các tệp README bên dưới có một lỗi chính tả. Tệp README đánh vần sai từ "contain" thành "containnns". Chủ sở hữu repository là MNALO, và Olivia là cộng tác viên. Cô ấy sẽ sửa lỗi và gửi một PULL Request. Bạn sẽ thấy quy trình tạo PULL Request qua ví dụ cụ thể dưới đây.
Trong tệp trên, bạn có thể thấy lỗi chính tả ở từ "containnns".
1. Fork repository
"Fork" là một bản sao của repository. Fork một repository cho phép bạn tự do thử nghiệm các thay đổi mà không ảnh hưởng đến dự án gốc. (Nguồn)

2. Mở bash trên máy tính của bạn
Bạn cần di chuyển đến đường dẫn hoặc thư mục cần thiết bằng lệnh cd, và có thể xem nội dung bằng lệnh ls, lệnh này liệt kê tất cả tệp hiện có trong thư mục; trong trường hợp của chúng ta, bạn có thể thấy 'README.md' đang có mặt.

3. Tạo một nhánh mới
Bạn có thể tạo nhánh mới bằng git checkout -b 'branch_name'. Trong lệnh trên, cờ -b được dùng để tạo nhánh mới, và branch_name dùng để đặt tên cụ thể cho nhánh; với checkout, bạn sẽ chuyển sang nhánh vừa tạo.

4. Thực hiện thay đổi bằng vim từ bash hoặc sửa trực tiếp trong tệp README gốc
Bạn có thể đổi từ "containnns" thành "contains" trong tệp README, và có thể xem các thay đổi cùng trạng thái hiện tại bằng lệnh sau.
5. Thêm và Commit tệp vào repository
Bạn cần add và commit bằng các lệnh sau.

6. Push repository lên GitHub
Bạn cần push nội dung bằng git push origin 'branch_name'. Trong lệnh trên, origin là repository từ xa, và 'branch_name' là nhánh cần tải nội dung cục bộ của bạn lên.

7. Tạo PULL request cho nhánh cụ thể trên GitHub
Bạn có thể vào repository của mình trên GitHub và thấy có một nhánh mới.
Bạn có thể chuyển sang bước 8, nhưng cần cập nhật repository cục bộ với repository upstream.
Hoặc, bạn có thể dùng git pull-request trong dòng lệnh và hoàn tất PULL Request lên GitHub, khi đó bạn sẽ được yêu cầu push nhánh hiện tại lên repository từ xa.

8. Mở Pull request
Bạn cần nhấp nút Create pull request để hoàn tất thao tác.

Xóa nhánh sau khi PULL Request được hợp nhất
Bạn cần chuyển đến trang chính của repository và nhấp Pull requests.

Bạn cần nhấp Closed để xem danh sách tất cả PULL Request bạn đã tạo; hiện tại chỉ có một, hãy chọn yêu cầu liên quan đến nhánh bạn muốn xóa.

Bây giờ bạn có thể nhấp Delete branch để hoàn tất thao tác.

Chủ sở hữu repository có thể xem tất cả các commit, pull request, v.v., do cộng tác viên và người khác thực hiện. Những thay đổi do ai đó thực hiện có thể quan trọng, là các bản vá nhanh cho lỗi, sai sót, v.v., và được thêm vào dự án.

Chủ sở hữu bây giờ nhấp "Merge pull request". Đồng thời, anh/chị ấy sẽ nhấp "Confirm merge" theo quy trình bên dưới.


Thay đổi cuối cùng trong tệp README.md với lỗi chính tả đã được sửa như dưới đây.

PULL Request qua GitHub Desktop
Tệp "imp" có một lỗi chính tả; MNALO là chủ sở hữu và Olivia là cộng tác viên thực hiện quy trình sau để tạo PULL request từ GitHub Desktop.
1. Clone và mở trên desktop
Một dự án được clone và nhấp "Open in Desktop".

2. Tạo nhánh mới
Một nhánh mới, "fix-typo-imp" được tạo.

3. Thực hiện thay đổi trong tệp imp bằng trình soạn thảo văn bản
Bạn có thể sửa nội dung tệp imp, sửa lỗi chính tả và thêm một số văn bản.
4. Commit các thay đổi
Viết thông điệp commit và nhấp "Commit to fix-typo-imp".

5. Publish nhánh
Bạn có thể publish nhánh, thao tác này sẽ push commit lên GitHub.

6. Tạo PULL request
Bạn có thể tạo PULL request bằng cách nhấp Create pull request.
Bạn cũng có thể viết thông điệp rồi nhấp Create pull request một lần nữa.

Các bước tiếp theo giống như phần "PULL Request qua Dòng lệnh" ở trên.
Kết luận
Bước tiếp theo, hãy thử khóa học GitHub Concepts để tiếp tục luyện tập các tác vụ hằng ngày. Tôi cũng sẽ lấy Chứng chỉ GitHub Foundations của chúng tôi, được xây dựng nhờ hợp tác với GitHub. Hoàn thành chứng chỉ sẽ rất nổi bật trên sơ yếu lý lịch, cộng thêm có ưu đãi lớn cho lệ phí kỳ thi khi bạn hoàn thành khóa học. Cuối cùng, tôi sẽ xem GitHub Actions, vì chúng ngày càng được sử dụng trong quy trình CI/CD, liên quan đến các thao tác push/pull.
Câu hỏi thường gặp
Git push là lệnh gì?
Lệnh git push được dùng để tải nội dung từ repository cục bộ của bạn lên một repository từ xa như GitHub. Điều này rất quan trọng để chia sẻ thay đổi với người khác hoặc đồng bộ phát triển cục bộ của bạn với một repository công khai hoặc dùng chung.
Tôi thực hiện Git pull request như thế nào?
Git pull request không chỉ là một lệnh Git trực tiếp mà là tính năng do GitHub cung cấp để thông báo cho người duy trì dự án về các thay đổi bạn đã push lên một repository trên GitHub. Bạn bắt đầu bằng cách thay đổi trong fork của repository, push các thay đổi đó, rồi gửi pull request qua giao diện web của GitHub.
Sự khác nhau giữa git pull và git fetch là gì?
git pull làm hai việc: lấy (fetch) các thay đổi từ một nhánh từ xa và ngay lập tức hợp nhất (merge) chúng vào nhánh hiện tại của bạn. Ngược lại, git fetch chỉ lấy các thay đổi từ repository từ xa mà không hợp nhất, cho phép bạn xem xét trước khi tích hợp vào nhánh của mình.
Tôi có thể xóa nhánh sau khi hợp nhất một pull request không?
Có. Sau khi pull request được hợp nhất, bạn có thể xóa nhánh một cách an toàn vì nó đã hoàn thành nhiệm vụ. Việc xóa nhánh giúp repository gọn gàng và dễ quản lý.
Điều kiện tiên quyết để dùng GitHub Desktop cho các thao tác Git là gì?
Để dùng GitHub Desktop, bạn cần tải và cài đặt ứng dụng trên hệ thống, có tài khoản GitHub, và tốt nhất là quen thuộc phần nào với quy trình làm việc của GitHub. Đây là giao diện thân thiện giúp đơn giản hóa nhiều lệnh Git thành các thao tác bấm chuột.
Tôi xử lý xung đột trong quá trình Git pull request như thế nào?
Xung đột xảy ra khi thay đổi ở một nhánh chồng lấn với thay đổi ở nhánh khác và không thể hợp nhất tự động. Để giải quyết, bạn phải chỉnh sửa thủ công các tệp để quyết định nội dung cuối cùng, cập nhật thay đổi, rồi hoàn tất quá trình hợp nhất. Các công cụ trong GitHub và GitHub Desktop có thể giúp xác định và xử lý xung đột.
Điều gì khiến GitHub đổi tên nhánh mặc định từ master sang main?
GitHub thay đổi tên nhánh mặc định để phù hợp với thực hành ngôn ngữ bao hàm. Thuật ngữ "master" được một số người xem là có thể gây nhạy cảm, và "main" được chọn như một lựa chọn trung tính và mô tả hơn.

