GitHub và pull request
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 5.Tóm tắt
Tới giờ Git chỉ nằm trên máy bạn. Làm nhóm thì cần một kho chung để mọi người
gửi code lên và lấy code của nhau về. GitHub là nơi giữ kho chung đó, và pull
request là cách đề nghị gộp một nhánh vào main sau khi được người khác xem.
Khái niệm
☁️ Remote: kho Git nằm trên máy khác, thường là GitHub, hay được đặt tên origin.
🔃 Push / pull: git push gửi commit của nhánh lên remote, git pull lấy commit mới từ remote về rồi merge vào nhánh đang đứng.
🙋 Pull request (PR): đề nghị trên GitHub gộp một nhánh vào main, để người khác đọc code và góp ý trước khi merge.
Ví dụ
Tạo repository rỗng trên GitHub tên Shop, rồi nối kho trên máy với nó:
git remote add origin https://github.com/an/Shop.git
git push -u origin maingit remote add origin <url>đặt tênorigincho kho trên GitHub.git push -u origin maingửi nhánhmainlên.-ughi nhớ nhánh tương ứng, lần sau chỉ cầngit push,git pull.
Quy trình làm một tính năng:
git switch -c phi-ship
# sửa code, commit
git push -u origin phi-shipSau đó mở trang repository trên GitHub, bấm Compare & pull request. Đồng nghiệp đọc code và góp ý, bạn sửa rồi push tiếp lên cùng nhánh.
Khi pull request được đồng ý, bấm Merge pull request để gộp phi-ship
vào main trên GitHub. Cuối cùng, trên máy chuyển về main và chạy
git pull để lấy bản đã merge.
Thử ngay
Chạy lệnh này một lần để git pull gộp bằng merge, như bài Branch và merge:
git config --global pull.rebase falseBình vừa push một commit lên main. Bạn chưa pull, commit trên main của
mình rồi chạy git push. Không có đồng nghiệp thì tự đóng vai Bình: chạy
git clone kèm địa chỉ repository để tải nó về một thư mục khác, rồi commit
và push từ đó.
Đoán trước khi chạy: push có thành công không? Nếu không thì phải làm gì?
Xem kết quả
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/an/Shop.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally.Bị từ chối. Remote có commit của Bình mà máy bạn chưa có.
Chạy git pull để lấy về và merge (có conflict thì xử lý như bài trước),
rồi git push lại. Nếu Git mở trình soạn thảo để hỏi lời mô tả cho merge, giữ nguyên nội dung,
lưu rồi đóng lại.
Lỗi hay gặp
Dùng git push --force khi bị từ chối. Lệnh này ghi đè remote bằng bản
trên máy bạn, commit của Bình biến mất khỏi GitHub.
# SAI — xoá mất commit của người khác
git push --force# ĐÚNG — lấy commit của người khác về trước
git pull
git pushNhánh chung như main nên bật bảo vệ trên GitHub: không cho push thẳng,
mọi thay đổi phải qua pull request.
Tóm tắt
- Remote
originlà kho chung trên GitHub. git pushgửi commit lên,git pulllấy commit về và merge.- Mỗi tính năng: nhánh riêng, push, mở pull request, review, rồi merge.
- Push bị từ chối thì
git pulltrước. Khôngpush --forcelên nhánh chung.
Tự kiểm tra
0/3 câuChạy git push và nhận "rejected ... (fetch first)". Nguyên nhân là gì?
Vì sao nên merge vào main qua pull request thay vì push thẳng?
Lệnh nào gửi nhánh phi-ship lên GitHub lần đầu và ghi nhớ nhánh tương ứng?