Trong các bài viết trước mình đã giải thích lý do vì sao dùng Git cũng như cơ chế hoạt động của Git. Trong bài viết này và các bạn sẽ cùng tìm hiểu về một số khái niệm cơ bản thường gặp khi sử dụng git và cách sử dụng của chúng.
1. Lịch sử Git
Khi sử dụng git, lệnh đầu tiên mà chúng ta thường gõ:
git init
Lệnh này sẽ tạo ra một thư mục ẩn có tên .git và đây chính là repository (hay kho chứa). Còn phần code hay hay thư mục của project nằm cùng với thư mục .git được gọi là Working Directory. Git sử dụng repository này để lưu trữ, giám sát toàn bộ thông tin về các trạng thái của và bất cứ thay đổi nào với project lúc này sẽ được git lưu trữ lại.
2. Sao chép dữ liệu từ remote Repository
Đây là lệnh mỗi khi bạn bắt đầu một dự án để kéo code từ trên Remote Repository về Local Repository
git clone <git_remote_url>
3. Tạo và chuyển đổi giữa các nhánh
Nhánh mặc định là master. Nhánh mới được tạo ra sẽ chứa toàn bộ trạng thái và những thay đổi đã thực hiện trên project trước khi được tạo. Với mỗi repository ta có thể tạo nhiều nhánh khác nhau và các nhánh này là độc lập với nhau nên khi ta có thay đổi đối với project trên nhánh này sẽ không ảnh hưởng đến các nhánh khác
Để tạo mới một nhánh:
git branch <name_newnew_branch>
Để tạo mới và chuyển sang nhánh đó:
git checkout -b <name_new_branch>
Để kiểm tra nhanh hiện tại ta đang đứng cũng như xem tất cả các nhanh trên repo:
git branch
Để chuyển qua một nhánh khác
git checkout <name_branch>
4. Gộp và xoá nhánh
Ví dụ: Bạn muốn merge branch B vào branch A. Bạn chuyển đến branch A rồi thự hiện lệnh
git merge <ten_branch_muon_merge>
Trong trường hợp nhánh chúng ta tạo ra trước đó không còn cần thiết nữa, ta có thể tiến hành xóa chúng đi bằng cách sử dụng các lệnh như sau:
git branch -d <ten_nhanh>
Với cách xóa trên, nếu nhánh cần xóa chưa được gộp thay đổi với nhánh khác hoặc bạn không phải đứng ở nhánh cha tạo ra nhánh muốn xoá sẽ lập tức báo lỗi. Với cách xóa này thì nhánh được chỉ định sẽ lập tức bị xóa kể cả trong trường hợp nó chưa được gộp với nhánh khác
git branch -D <ten_nhanh>
Nếu bạn muốn xoá 1 branch trên remote thì có thể thực hiện bằng lệnh:
git push --delete <ten_remote> <ten_nhanh>
Lưu ý: đối với cả local branch và remote branch ta có thể tiến hành xóa đồng thời nhiều branch bằng cách liệt kê tên các branch cần xóa liền nối tiếp nhau và cách nhau một khoảng trắng
5. Cách để lưu lại trạng thái thay đổi
Sau khi bạn thay đổi source code: thêm mới, sửa, xoá files,… Bạn cần phải cập nhật lên Staging Area. Để cập nhật hết các files ta sử dụng:
git add .
Để cập nhật từng file ta sử dụng
git add <ten_file>
6. Ghi lại thay đổi
Commit nghĩa là một hành động để git lưu lại một snapshot của các sự thay đổi trong thư mục làm việc. Và các tập tin, thư mục được thay đổi đã phải nằm trong Staging Area. Mỗi lần commit nó sẽ được lưu lại lịch sử chỉnh sửa của code kèm theo tên và địa chỉ email của người commit.
git commit -m "noi_dung_commit"
Ngoài ra trong Git bạn cũng có thể khôi phục lại tập tin trong lịch sử commit của nó để chia cho một branch khác, vì vậy bạn sẽ dễ dàng khôi phục lại các thay đổi trước đó. Lệnh này sẽ tạo ra một commit mới đảo ngược lại những thay đổi trong commit được chỉ định.
git revert <commit_hash_code>
Đôi khi trong lúc làm việc, ta thường tạo ra một số commit dư thừa và sau đó muốn gộp chung số commit đó lại với một message rõ ràng hơn về mục đích chung của toàn bộ các commit đó. Để làm được điều này, ta có thể sử dụng những lệnh sau:
git rebase -i <commit_hash_code>
Với commit_hash_code là hash code của commit cuối cùng của nhóm cần gộp hoặc:
git rebase -i HEAD~<index>
Với index là số lượng commit cần gộp so với commit cuối cùng. Ngoài ra khi thực hiện việc rebase để gộp commit, ta có các lựa chọn khác như pick|squash|fixup để quyết định kiểu gộp. Thường thì mình dùng fixup và squash để gộp
7. Lưu trạng thái thay đổi tạm thời
Trong quá trình chúng làm việc, có những lúc chúng ta đang code dở một chức năng nào đó nhưng bất ngờ ở một chức năng trên branch khác đang có lỗi cần phải sửa gấp và chúng ta muốn lưu lại thay đổi đã làm trên nhánh hiện tại và ại không muốn commit thì hãy dùng đến stash. Stash cho bạn khả năng lưu lại trạng những thay đổi mà bạn đã tạo ra mà không cần thiết phải commit nó giúp bạn có thể dễ dàng chuyển sang nhánh khác làm việc và sau đó quay lại và tiếp tục những gì bạn đang làm ở nhánh đó.
Để đưa toàn bộ các thay đổi đó vào trạng thái staged, sau đó sử dụng lệnh sau để lưu thay đổi đó mà không cần commit:
git stash #
hoặc
git stash save
Để xem lại các thay đổi đã lưu, ta có thể dùng các lệnh sau:
git stash list
stash@{0}: WIP on <branch-name>: <lastest commit>
stash@{1}: WIP on <branch-name>: <lastest commit>
Nếu muốn xem cụ thể nội dung thay đổi của một lần lưu cụ thể, ta dùng lệnh:
git stash show "stash@{n}"
# với n là lần lưu tương ứng trong danh sách
Để xóa toàn bộ những lần đã lưu
git stash clear
8) Đẩy code lên và lấy code về
Nếu bạn đã added và committed các thay đổi và bạn muốn đẩy nó lên hoặc remote của bạn đã update và bạn apply tất cả thay đổi đó trên code của mình.
git push <remote> <branch>
Khi trên remote Repository có những thay đổi mới và bạn muốn lấy số thay đổi đó về một nhánh ở local để có code mới nhất thì bạn sử dụng lệnh sau.
git pull <remote> <branch>
9. Ghép code
Vì git sinh ra để giúp ta giải quyết vấn đề có thể làm nhiều việc hoặc nhiều người cùng code trong 1 lúc nên vấn đề các thành viên có code chồng chéo lên nhau hoặc sửa chung file của nhau là chuyện bình thường trong quá trình làm việc. Điều đó dẫn đến việc conflict code với pull của bạn. Bạn phải lấy code mới về rồi tiến hành gộp branch hiện tại với branch mà ta lựa chọn (thường thì sẽ gộp nhánh đang làm với nhánh develop). Rebase sẽ đưa toàn bộ nhánh Feature lên trên 'đầu' nhánh develop làm thay đổi lịch sử commit
git rebase <ten_nhanh_muon_gop>
Ví dụ đây là nhánh ban đầu
Và đây là sau khi thực hiện rebase
10. Ví dụ
Để dễ hình dung nhất mình sẽ đưa ra một luồng dùng Git cơ bản mà ai mới bắt đầu cũng phải trải qua để các bạn có thể test thử:
Bước 1: Đầu tiên clone project từ Remote Repository về Local Repository nơi mà bạn muốn lưu trên máy
git clone <git_remote_url>
Bước 2: Sau đó vào folder của project bắt đầu ta tạo file .git để quản lý toàn bộ lịch sử Git
git init
Bước 3: Tạo một nhánh mới từ nhánh master hoặc develop (về cơ bản thì nên xử lý trên develop bạn có thể tham khảo bài này để biết lý do)
git checkout -b <name_new_branch>
Bước 4: Bạn sẽ làm việc thêm, sửa, xoá tại nhánh đó
Bước 5: Sau khi hoàn thành công việc bạn phải cập nhật vào Staging Area
git add .
Bước 6: Commit cập nhật sự thay đổi lên Local Repository
git commit -m <noi_dung_commit>
Bước 7: Push đẩy ngược code lên Remote Repository
git push <remote> <branch>
remote ở đây nếu không thay đổi thì sẽ là origin
Tất nhiên trong quá trình sử dụng thì sẽ còn rất nhiều trường hợp sảy ra đòi hỏi các bạn phải tìm hiểu thêm nhưng với những kiến thức mà mình chia sẻ ở đây đã có thể giúp bạn kiểm soát việc dùng git cơ bản trong môi trường làm việc rồi.
Comments