GIT: Các lệnh hữu ích
By JoeVu, at: 08:16 Ngày 07 tháng 11 năm 2023
Thời gian đọc ước tính: __READING_TIME__ minutes


Git là một hệ thống quản lý phiên bản mạnh mẽ giúp các nhà phát triển quản lý kho lưu trữ mã của họ một cách hiệu quả. Cho dù bạn là một chuyên gia Git dày dặn kinh nghiệm hay mới bắt đầu hành trình với quản lý phiên bản, hướng dẫn này bao gồm các lệnh Git cần thiết và một số mẹo và thủ thuật hữu ích để cải thiện quy trình làm việc Git của bạn.
1. Các lệnh Git cần thiết
Kho lưu trữ
Khởi tạo kho lưu trữ Git cục bộ:
git init
Trong trường hợp bạn đã có một số mã hiện có và muốn đẩy những thay đổi mới lên kho lưu trữ từ xa/repo
git remote add origin https://github.com/glinteco-com/...
git remote add non_existed_remote https://non_existed_remote.com/glinteco-com/...
git remote remove non_existed_remote # xóa kho lưu trữ từ xa
Sao chép kho lưu trữ công khai
git clone [repo_url]
Sao chép kho lưu trữ riêng tư
git clone ssh://[email protected]/[username]/[repository-name].git
Một vấn đề mà nhiều nhà phát triển mới gặp phải là: không thể sao chép một kho lưu trữ riêng tư mà họ có quyền truy cập, chỉ đơn giản là do ssh-token. Một giải pháp đơn giản là tạo một token cá nhân và thực hiện:
git clone https://[email protected]/glinteco-com/Samples
[nhập token của bạn ở đây]
Kiểm tra trạng thái kho lưu trữ
git status
Sân khấu thay đổi
Thêm một tệp cụ thể vào vùng sân khấu:
git add [tên-tệp]
Thêm tất cả các tệp mới và đã thay đổi vào vùng sân khấu:
git add -A
Thực hiện cam kết thay đổi
Thực hiện cam kết các thay đổi của bạn với một thông báo mô tả:
git commit -m "[thông báo cam kết]"
Xóa một tệp hoặc thư mục
Xóa một tệp (hoặc thư mục) khỏi kho lưu trữ và thư mục làm việc:
git rm -r [tên-tệp.txt]
Quản lý nhánh
Liệt kê tất cả các nhánh cục bộ với nhánh đang hoạt động được đánh dấu bằng dấu hoa thị:
git branch
Liệt kê tất cả các nhánh, bao gồm cả các nhánh từ xa:
git branch -a
Tạo một nhánh mới:
git branch [tên nhánh]
Xóa một nhánh:
git branch -d [tên nhánh]
Xóa một nhánh một cách mạnh mẽ:
git branch -D [tên nhánh]
Xóa một nhánh từ xa:
git push origin --delete [tên nhánh]
Tạo một nhánh mới và chuyển sang nó trong một lệnh:
git checkout -b [tên nhánh]
Sao chép một nhánh từ xa và chuyển sang nó:
git checkout -b [tên nhánh] origin/[tên nhánh]
Đổi tên một nhánh cục bộ:
git branch -m [tên nhánh cũ] [tên nhánh mới]
Chuyển sang một nhánh khác:
git checkout [tên nhánh]
Chuyển sang nhánh bạn đã kiểm tra lần cuối:
git checkout -
Bỏ các thay đổi được thực hiện đối với một tệp và khôi phục nó về trạng thái đã cam kết cuối cùng:
git checkout -- [tên-tệp.txt]
Trộn một nhánh vào nhánh đang hoạt động:
git merge [tên nhánh]
Trộn một nhánh nguồn vào một nhánh đích:
git merge [nhánh nguồn] [nhánh đích]
Xóa một nhánh từ xa:
git push origin --delete [tên nhánh]
Đổi tên nhánh hiện tại của bạn
git branch -m [tên_mới]
Lưu trữ thay đổi
Lưu trữ các thay đổi trong thư mục làm việc của bạn để chuyển đổi nhánh hoặc làm việc trên một cái gì đó khác:
git stash
Xóa tất cả các mục đã lưu trữ:
git stash clear
Đẩy thay đổi
Đẩy nhánh của bạn lên kho lưu trữ từ xa của bạn:
git push origin [tên nhánh]
Đẩy thay đổi lên kho lưu trữ từ xa, liên kết nhánh nếu cần:
git push -u origin [tên nhánh]
Đẩy thay đổi lên kho lưu trữ từ xa cho một nhánh đã được liên kết trước đó:
git push
Cập nhật và kéo thay đổi
Cập nhật kho lưu trữ cục bộ của bạn lên bản cam kết mới nhất từ kho lưu trữ từ xa:
git pull
Kéo thay đổi từ một nhánh cụ thể trong kho lưu trữ từ xa:
git pull origin [tên nhánh]
Quản lý cấu hình
Đặt tên người dùng và email Git toàn cục của bạn:
git config --global user.name "joevu"
git config --global user.email "[email protected]"
Xem cấu hình Git toàn cục của bạn:
git config --global --list
Đặt tên người dùng và email Git cục bộ cho một kho lưu trữ cụ thể:
git config --local user.name "joevu"
git config --local user.email "[email protected]"
Xem cấu hình Git cục bộ cho một kho lưu trữ cụ thể:
git config --local --list
2. Mẹo và thủ thuật Git
Bỏ qua móc trước cam kết Git
Bạn có thể bỏ qua các móc trước cam kết Git bằng tùy chọn -n hoặc --no-verify:
git commit -n -m 'Cập nhật' # hoặc git commit -m 'Cập nhật' -n
Khám phá lịch sử Git
Xem nhật ký lịch sử Git của bạn:
git log
Xem lịch sử Git tóm tắt với thống kê cam kết:
git log --summary
Xem biểu diễn ngắn gọn, một dòng của lịch sử Git của bạn:
git log --oneline
Xem trước thay đổi trước khi trộn
So sánh các thay đổi giữa hai nhánh trước khi trộn:
git diff [nhánh nguồn] [nhánh đích]
Điều tra thay đổi với Git Blame
Xác định ai đã thực hiện thay đổi đối với các dòng mã cụ thể bằng cách sử dụng git blame:
git blame đường dẫn/đến/tệp
Hoàn tác thay đổi cam kết
Hoàn tác một cam kết cụ thể bằng ID của nó:
git revert [commitid]
Rebase nâng cao
Rebase nhánh hiện tại của bạn từ một nhánh chính được chỉ định (ví dụ: develop):
git rebase -i develop
So sánh lịch sử Git
So sánh các thay đổi giữa hai cam kết cho một tệp cụ thể:
git diff $start_commit..$end_commit -- đường dẫn/đến/tệp
Sử dụng Git Stash
Lưu trữ các thay đổi tạm thời và sau đó đưa chúng trở lại thư mục làm việc của bạn:
git stash save
git stash pop
Chọn một số cam kết từ các nhánh khác
Tìm băm cam kết git từ các nhánh khác mà bạn muốn chọn bằng git reflog hoặc git log. Sau đó thực hiện:
git cherry-pick hash_value
3. Mô hình nhánh Git - Luồng của nvie
Đối với một mô hình nhánh Git thành công, hãy xem xét việc làm theo Mô hình nhánh Git của nvie của Vincent Driessen. Mô hình này cung cấp một cấu trúc rõ ràng và hiệu quả để quản lý các nhánh Git trong các dự án của bạn, đảm bảo quy trình làm việc suôn sẻ cho các nhóm phát triển.
Mô hình đề xuất các nhánh sau:
-
Các nhánh chính:
-
master/main: Đại diện cho mã đã sẵn sàng cho sản xuất. Chỉ hợp nhất vào nó từ nhánh develop khi bạn đã sẵn sàng phát hành phiên bản mới.
-
staging: Đại diện cho mã đã sẵn sàng cho giai đoạn (sẵn sàng cho uat). Chỉ hợp nhất vào nó từ nhánh develop khi bạn đã sẵn sàng phát hành phiên bản mới.
-
develop: Nhánh tích hợp chính nơi các nhánh tính năng hợp nhất các thay đổi của chúng để kiểm tra và chuẩn bị cho bản phát hành tiếp theo.
-
-
Các nhánh hỗ trợ:
-
Các nhánh tính năng: Các nhánh này được tạo ra cho các tính năng mới hoặc sửa lỗi. Chúng được tạo nhánh từ develop và được hợp nhất trở lại khi công việc hoàn tất.
-
Các nhánh phát hành: Chuẩn bị cho bản phát hành mới từ develop. Chỉ cho phép sửa lỗi và điều chỉnh cuối cùng trong nhánh này.
-
Các nhánh khắc phục sự cố nóng: Được tạo từ master để giải quyết các sự cố nghiêm trọng trong phiên bản sản xuất. Được hợp nhất trở lại cả master và develop.
-
Mô hình của Vincent Driessen đơn giản hóa sự cộng tác, quản lý phát hành và theo dõi sự cố trong các dự án Git, biến nó thành tài liệu tham khảo có giá trị cho các nhóm muốn sắp xếp hợp lý các quy trình phát triển của họ.
Với các lệnh Git cần thiết, mẹo và giới thiệu về mô hình nhánh Git của nvie, bạn sẽ có các kỹ năng và kiến thức để nâng cao khả năng quản lý phiên bản và cộng tác của mình, giúp bạn trở thành người dùng Git thành thạo hơn.