Sổ tay Git – Tổng hợp những thứ cơ bản nhất trong Git

Trong bài viết trước, mình đã có dịp giới thiệu Git: Git là gì và tại sao phải dùng Git?

Trong bài viết này, mình xin chia sẻ “cheat sheet” về những lệnh thường dùng trong Git dành cho newbie.

1. Cài đặt:

Cách cài đặt Git vô cùng đơn giản, các bạn có thể xem chi tiết tại bài viết: Cách cài đặt Git.

2. Tạo một repository mới:

Repository (kho chứa) dùng để chứa các thay đổi của project.

Để tạo 1 repository mới, bạn hãy mở cửa sổ lệnh và gõ dòng lệnh:

3. Sao chép (clone) một repository:

Để clone 1 repository  về máy từ một remote server nào đó như github với đường dẫn là  https://github.com/angular/angular.git thì sử dụng dòng lệnh:

4. Quy trình làm việc:

Thư mục cục bộ của bạn bao gồm ba “trees” được duy trì bởi git:

  • Thứ nhất là Thư Mục Đang Làm Việc (Working Directory) có chứa các tập tin hiện tại.
  • Thứ hai là Chỉ Mục (Index) đóng vai trò như staging area (khu vực theo dõi trạng thái của code).
  • Thứ bai  là HEAD trỏ đến commit gần đây nhất của bạn.
Tree of Git

Tree of Git

5. Add và Commit

Add là thao tác thêm các tập tin vào chỉ mục (index) để theo dõi trạng thái thay đổi. Ví dụ: để thêm tập tin có tên là hello.html vào chỉ mục để theo dõi trạng thái, ta dùng lệnh như sau:

Trong trường hợp bạn muốn thêm tất cả các tập tin vào index thì bạn dùng lệnh (có dấu chấm ở cuối):

Commit là thao tác để lưu những thay đổi vào repository trên máy tính của bạn.

Để commit thì đâu tiên bạn phải thực hiện thao tác Add như đề cập ở trên. Trong Git, để commit ta phải có comment mô tả commit đó. Ví dụ: ta cần commit với comment là "version 1.0: add hello.html file" thì ta dùng lệnh:

Bây giờ thì tập tin hello.html nằm trong khu vực chỉ mục (index) đã được chuyển đến khu vực HEAD.

6. Push

Push là thao tác lưu các thay đổi tại máy tính của bạn (local) lên các remote repository (các máy chủ từ xa ví dụ như Github, Gitlab, Bitbucket).

những thay đổi của bạn sau khi commit như trên sẽ đang nằm tại HEAD. Để gửi những thay đổi đó đến remote repository, bạn thực thi lệnh:

Trong đó:

  • origin mà tên remote prepository mặc định.
  • master là tên branch (nhánh) mặc định.

Trường hợp bạn chưa clone một repository nào đó từ máy chủ từ xa về thì Git của bạn sẽ không thiết lập sẵn 2 thuộc tính originmaster. Do đó, Project trên máy tính cục bộ thì bạn phải kết nối đến repository từ xa nào đó thì mới có thể push.

Giả sử, mình đã tạo một repository trên Github có đường dẫn là: https://github.com/gitvani/gitcheatsheet.git . Để kết nối Git trên máy tính cục bộ của mình đến địa chỉ này ta dùng lệnh: 

Trong đó, origin là tên mình đặt để thay thế cho đường dẫn https://github.com/gitvani/gitcheatsheet.git. Bạn có thể thay đổi bất kì, nhưng cần lưu ý là origin là tên mặc định khi push, nếu bạn chỉ dùng lệnh git push thì Git sẽ hiểu là git push origin master

7. Pull

Pull (kéo) là thao tác cập nhật lại repository trên máy tính cục bộ nếu trên remote repository có thay đổi.

Giả sử, thời điểm bạn clone project về máy thì chưa có gì để cập nhật lại cả. Nhưng sau đó, đồng nghiệm của bạn có chỉnh sửa gì đó rồi push lên lại remote repository. Vì vậy, code của bạn đã lỗi thời so với lần commit mới nhất của remote repository. Do đó, để cập nhật lại mà không cần phải clone lại lần nữa, ta dùng lệnh:

8. Branch

Branch (nhánh) được dùng để phát triển tính năng tách riêng ra từ những nhánh khác. Nhánh master là nhánh mặc định khi bạn tạo một repository.

Giả sử, trong giai đoạn phát triển, bạn muốn phát triển một chức năng nào đó nhưng lại không muốn ảnh hưởng lên phần hiện tại, bạn có thể tạo branch khác và phát triển theo nhánh đó và có thể merge (trộn) trở lại nhánh master một khi đã hoàn tất.

Một nhánh có tên là feature_x được tạo ra từ nhánh master

Ví dụ: Một nhánh có tên là feature_x được tạo ra từ nhánh master

Giả sử ta cần tạo một branch có tên là là “feature_x” và chuyển từ nhánh master hiện tại qua nhánh này ta dùng lệnh:

Để chuyển trở lại nhánh master, ta dùng lệnh:

Nếu bạn muốn xóa nhánh feature_x đó thì dùng lệnh:

Các bạn cần lưu ý rằng một nhánh không có giá trị với các nhánh khác trừ khi bạn đẩy nhánh đó đến remote repository, chẳng hạn, nếu bạn muốn push nhánh feature_x thì ta dùng lệnhgit push origin feature_x

9. Merge

Merge (trộn) là thao tác trộn các nhánh lại với nhau.

Trong phần branch đã đề cập ở trên, để hợp các nhánh lại, ta cần dùng merge. Ví dụ: để hợp nhánh feature_x và nhánh master ta dùng lệnh:

Lưu ý: Bạn cần phải đứng ở nhánh master thì merge lại được.

Trong trường hợp pull lẫn merge các nhánh, Git cố gắng trộn tự động (auto-merge) các thay đổi. Không may, điều này không phải lúc nào cũng làm được và thường dẫn đến xung đột (conflict). Khi đó, bạn cần trộn các xung đột đó thủ công bằng cách chỉnh sửa các tập tin bị xung đột được hiển thị bởi Git.

Mở tập tin bị xung đột lên, bạn sẽ thấy những chỗ bị xung đột sẽ được đánh dấu tương tự như sau:

Việc bây giờ là bạn chọn giữ lại cái nào trong hai cái trên.

Sau khi chỉnh sửa các tập tin bị xung đột, bạn phải đánh dấu chúng là đã được trộn (merged) với lệnh git add <tên-tập-tin>. Ví dụ: khi merge các nhánh lại, bạn bị xung đột ở tập tin hello.html, khi đó bạn cần chỉnh sửa, sau đó cần đánh dấu đã trộn bằng lệnh:

10. Reset

Reset dùng để trở lại dòng một commit trước đó.

Giả sử ta có lịch sử commit như sau: (dùng lệnh git log để xem lịch sử commit):

commit1
commit2
commit3
commit4
commit5

Giả sử bạn chỉnh sửa gì đó vô tình luôn xóa tập tin nào đó chẳng hạn.

Trường hợp 1: Nếu bạn muốn quay về commit5, bạn dùng lệnh:

Lưu ý rằng, sau khi dùng lệnh trên, commit5 sẽ biến mất khỏi lịch sử commit.

Trường hợp 2: bạn muốn quay về commit4 thì cần thêm dấu ^ như sau:

Vậy nến muốn quay về commit3 thì chỉ cần dùng HEAD^^. Quá dễ phải không nào 🙂

11. Tag

Bạn nên tạo nhãn (tag) khi commit các phiên bản của phần mềm để tiện quản lí.

Ví dụ: Bạn tạo tag mới tên là 1.0.0 với 10 ký tự đầu tiên của mã commit (commit id) là 1b2e1d63ff bằng cách:

Bạn có thể lấy mã commit với lệnh:

Bạn cũng có thể sử dụng ít hơn 10 kí tự của commit id, nó chỉ cần phải là duy nhất.

12. Các gợi ý hữu ích khác

Git GUI (Git với giao diện đồ họa) tích hợp sẵn:

Sử dụng kết quả git với nhiều màu:

Hiện log trên chỉ một dùng mỗi commit:


Bạn có điều gì chưa rõ hay muốn chia sẻ gì đó? Hãy comment bên dưới nhé. Thanks for reading. 🙂

 

Share
Share