Git cơ bản#
Giới thiệu về git#
Trong các bài trước trước, chúng ta đã tìm hiệu về quản lý phiên bản và một số quy trình, workflow của git với tư cách là một hệ thống quản lý phiên bản. Sau đó chúng ta đã cài đặt git trên hệ thống, cập nhật và cấu hình. Chúng ta cũng đã đi sâu hơn một chút và điểm khác nhau cơ bản trong hệ thống quản lý phiên bản Client-Server và hệ thống quản lý phiên bản phân tán ví dụ như Git.
Bây giờ, chúng ta sẽ tìm hiểu các câu lệnh cơ bản và trường hợp sử dụng chúng với git.
Trợ giúp với git#
Sẽ có lúc bạn không thể nhớ hoặc không biết lệnh cần sử dụng để hoàn thành công việc với git. Bạn sẽ cần giúp đỡ.
Google hoặc bất kỳ công cụ tìm kiểm nào có thể là điểm đến đầu tiên khi bạn tìm kiếm sự trợ giúp.
Tiếp sau đó có thể là trang chính thức của git và tài liệu. git-scm.com/docs Tại đây, bạn sẽ không những chỉ tìm thấy tài liệu tham khảo tốt cho tất cả các câu lệnh, mà còn có rất nhiều các tài nguyên khác.
Chúng ta cũng có thể truy cập tài liệu tương tự sau, điều này cực kỳ hữu ích nếu bạn không có kết nối nào từ terminal. Ví dụ: nếu chúng ta sử dụng lệnh git add
, chúng ta có thể chạy git add --help
và đọc hướng dẫn dưới đây.
Chúng ta cũng có thể dụng git add -h
để cung cấp tống hợp các tuỳ chọn có sẵn mà chúng ta có thể sử dụng.
Những câu chuyện xung quanh Git#
"Git không có quyền kiểm soát truy cập" - bạn có thể trao quyền cho một leader để duy trì mã nguồn.
"Git quá nặng" - Git có thể cung cấp các kho lưu trữ nông (shallow repositories), có nghĩa là lịch sử git sẽ được cắt giảm nếu bạn có một project lớn.
Những thiếu sót thực tế#
Không phải là phương pháp lý tưởng cho các tệp nhị phân. Tuyệt vời cho mã nguồn nhưng không tuyệt vời cho các tệp thực thi hoặc video chẳng hạn.
Git không thân thiện với người dùng, việc chúng ta phải dành thời gian để nói và tìm hiểu các lệnh và chứng năng của công cụ có lẽ là minh chứng rõ ràng nhất cho việc đó.
Nhìn chung, git khó học nhưng dễ sử dụng.
Hệ sinh thái git#
Tôi muốn trình bày ngắn gọn về hệ sinh thái xung quanh git nhưng không đi quá sâu và việc đó. Điều quan trọng là phải nhắc đến ở góc độ high-level.
Hầu như tất cả các công cụ phát triển hiện đại đều hỗ trợ git.
-
Công cụ phát triển - chúng ta đã đề cập tới Visual Studio Code, bạn sẽ tìm thấy các plugin và các tích hợp của git trong Sublime text và các trình soạn thảo văn bản và IDE khác.
-
Công cụ nhóm - Cũng được đề cập trong các công cụ như Jenkins theo góc nhìn CI/CD, Slack từ góc độ dịch vụ nhắn tin và Jira từ góc độ quản lý dự án và theo dõi vấn đề.
-
Cloud providers - Tất cả các nhà cung cấp điện toán đám mây lớn đều hỗ trợ git, Microsoft Azure, Amazon AWS, Google Cloud Platform và Alibaba Cloud.
-
Các dịch vụ dựa trên Git - Sau đó, chúng ta có GitHub, GitLab và BitBucket mà chúng tôi sẽ đề cập rõ hơn ở phần sau. Các dịch vụ này có thể coi như là một mạng xã hội dành cho mã nguồn.
Git Cheatsheet#
Chúng ta chưa đề cập đến hầu hết các lệnh này nhưng sau khi xem xét một số cheatsheet có sẵn, tôi cũng muốn ghi lại một số câu lệnh git và mục đích sử dụng của chúng. Chúng ta không cần phải nhớ tất cả những câu lệnh này, với việc thực hành và sử dụng nhiều hơn, bạn sẽ học được một số điều cơ bản về git.
Tôi đã lấy những câu lệnh từ atlassian nhưng viết lại chúng và đọc mô tả là một cách hay để biết các lệnh làm gì cũng như bắt đầu thực hành trong công việc hàng ngày.
Cơ bản về Git#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git init | git init <directory> |
Tạo một git repository tron thư mục được chỉ định |
git clone | git clone <repo> |
Sao chép repository tại |
git config | git config user.name |
Khai báo tên người sử dụng cho tất cả các commit ở repository hiện tại, có các flag system , global , local để tuỳ chọn. |
git add | git add <directory> |
Stage tất cả các thay đổi trong |
git commit -m | git commit -m "<message>" |
Commit các file đã được staged, sử dụng |
git status | git status |
Liệt kê các tệp được staged, unstaged và untracked. |
git log | git log |
Hiển thị tất cả lịch sử commit bằng định dạng mặc định. Có các tuỳ chọn bổ sung với lệnh này. |
git diff | git diff |
Hiển thị các thay đổi của các thay đổi chưa được stage. |
Git Undoing Changes#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git revert | git revert <commit> |
Tạo một commit mới hoàn tác lại tất cả các thay đổi trong |
git reset | git reset <file> |
Xoá |
git clean | git clean -n |
Hiển thị tệp nào sẽ bị xoá khỏi thư mục làm việc. Sử dụng -f thay cho -n để thực hiện việc xoá. |
Git Rewriting History#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git commit | git commit --amend |
Thay thế commit gần nhất bằng các thay đỏi đã được staged và ghép nó với commit cuối cùng. Sử dụng trong trường hợp chưa có gì được stage để thay đổi nội dung commit. |
git rebase | git rebase <base> |
Rebase nhanh hiện tại và trong |
git reflog | git reflog |
Hiện thị log của các thay đổi với HEAD của kho lưu trữ cục bộ (local repository). Thêm --relative-date hiển thị ngày tháng và --all để hiện thị tất cả các refs. |
Git Phân nhánh (Branch)#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git branch | git branch |
Liệt kê tất cả các branch trong repo của bạn. Thêm đối số |
git checkout | git checkout -b <branch> |
Tạo và checkout sang một branch mới tên |
git merge | git merge <branch> |
Merge |
Git Remote Repositories#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git remote add | git remote add <name> <url> |
Tạo một kết nối mới đến một remote repo. Sau khi thêm một remote, bạn có thể dùng |
git fetch | git fetch <remote> <branch> |
Kéo một nhánh cụ thể có tên |
git pull | git pull <remote> |
Kéo một bản sau của nhánh hiện tại từ remote repo và ngay lập tức merge nó vào bản sao local. |
git push | git push <remote> <branch> |
Đẩy nhánh tới |
Git Diff#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git diff HEAD | git diff HEAD |
Hiển thị sự khác biệt giữa thư mục làm việc và commit cuối cùng. |
git diff --cached | git diff --cached |
Hiện thị sự khác biệt giữa các thay đổi đã được staged và commit cuối cùng |
Git Config#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git config --global user.name |
git config --global user.name <name> |
Khai báo tên người dùng sẽ được sử dụng cho tất cả các commit ủa người dùng hiện tại. |
git config --global user.email |
git config --global user.email <email> |
Khai báo email sẽ được sử dụng cho tất cả các commit của người dùng hiện tại. |
git config --global alias |
git config --global alias <alias-name> <git-command> |
Tạo một phím tắt cho lệnh git . |
git config --system core.editor |
git config --system core.editor <editor> |
Cài đặt trình soạn thảo văn bản sẽ được sử dụng cho tất cả người dùng trên máy. |
git config --global --edit | git config --global --edit |
Mở tệp cấu hình chung trong trình soạn thảo văn bản để chỉnh sửa thủ công. |
Git Rebase#
Command | Example | Description |
---|---|---|
git rebase -i |
git rebase -i <base> |
Rebase nhánh hiện tại vào |
Git Pull#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git pull --rebase |
git pull --rebase <remote> |
Kéo các bản sao của nhánh hiện tại trên remote và rebasse vào bản sao tại local. Sử dụng git rebase thay cho merge để gộp các nhánh. |
Git Reset#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git reset | git reset |
Reset khu vực staging về commit gần nhất nhưng giữ nguyên thư mục làm việc. |
git reset --hard | git reset --hard |
Reset khu vực staging về commit gần nhất và ghi đè lên tất cả các thay đổi trong thư mục làm việc. |
git reset |
git reset <commit> |
Di chuyển branch hiện tại về |
git reset --hard |
git reset --hard <commit> |
Giống với lệnh trước đó nhưng reset cả khu vực staging, thư mục làm việc. Xoá bỏ các thay đổi chưa được commit và tất cả các commit phía sau |
Git Push#
Lệnh | Ví dụ | Mô tả |
---|---|---|
git push |
git push <remote> --force |
Ép buộc git đảy lên ngay cả khi kết quả không phải là một non-fast-forward merge. Không sử dụng --force trừ khi bạn biết chắc chắn mình đang làm gì. |
git push |
git push <remote> --all |
Đẩy tất cả các nhánh ở local đến một remote xác định. |
git push |
git push <remote> --tags |
Tage không được tự động đẩy lên khi bạn đẩy một nhánh hay sử dụng --all. --tags sẽ gửi tất cả những local tags lên remote repo. |