1. Cơ bản vê Git
Git là tên gọi của một Hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS) là một trong những hệ thống quản lý phiên bản phân tán phổ biến nhất hiện nay. DVCS nghĩa là hệ thống giúp mỗi máy tính có thể lưu trữ nhiều phiên bản khác nhau của một mã nguồn được nhân bản (clone) từ một kho chứa mã nguồn (repository), mỗi thay đổi vào mã nguồn trên máy tính sẽ có thể ủy thác (commit) rồi đưa lên máy chủ nơi đặt kho chứa chính. Và một máy tính khác (nếu họ có quyền truy cập) cũng có thể clone lại mã nguồn từ kho chứa hoặc clone lại một tập hợp các thay đổi mới nhất trên máy tính kia. Trong Git, thư mục làm việc trên máy tính gọi là Working Tree.
2. Các câu lệnh git thường sử dụng
Clone một remote repo
git clone https://github.com/username/repository.git
Câu lệnh trên sẽ tạo một thư mục mới có tên giống trên của repo.
Kiểm tra status của working tree
git status
Tạo 1 branch
git branch branch_name
Checkout sang 1 branch
git checkout branch_name
Đổi tên branch hiện tại
git branch -m branch_name
Tạo 1 branch mới và checkout sang luôn branch đó
git checkout -b branch_name
Xóa 1 branch
git branch -d branch_name
Tạo vài thay đổi, rồi commit
git add filename.txt (thêm 1 file được thay đổi) git add foldername/ (thêm tất cả file thay đổi trong 1 folder) git add . (thêm tất cả các file) git commit -m "Commiting changes" (commit)
Thay đổi commit gần nhất
git commit --amend (sử dụng khi muốn thêm, bớt file, message trong commit gần nhất) git commit --amend -m "New commit mesage" (sử dụng nếu chỉ muốn thay đổi commit message)
Push code
git push origin branch_name
Pull code từ remote về
git pull origin branch_name
Xem lịch sử commit
git log git log --oneline (xem dưới dạng 1 dòng)
Undo commit vẫn giữ các file đã thay đổi
git reset --soft commit_id git reset --soft HEAD~ (undo về commit gần nhất)
Undo commit không giữ các file đã thay đổi
git reset --hard commit_id
Merge branch
có thể dùng 2 kiểu sau
git merge branch_name git rebase branch_name
Khi bị conflict, git rebase sẽ yêu cầu bạn xử lý conflict trong từng commit một, trong khi git merge sẽ yêu cầu bạn xử lý tất cả conflict cùng 1 lúc. Rebase sẽ giúp bạn xử lý conflict dễ hơn nhưng lại khó khăn hơn trong việc revert conflict. Để hiểu rõ hơn về rebase vs merge các bạn có thể tham khảo bài viết sau. https://medium.com/datadriveninvestor/git-rebase-vs-merge-cc5199edd77c
3. Một số tình huống mình gặp phải khi làm việc với git
Bạn đang làm việc trên một nhánh cũ hiện đang không có code mới nhất của master
để xử lý tình huống này mình làm như sau:
nếu bạn đã lỡ commit rồi thì dùng:
git reset --soft HEAD~
git stash -u (đẩy tất cả các file đang thay đổi vào trong queue) git checkout master git checkout -b branch_name git stash pop git commit -m "message"
Undo reset soft/ reset hard
Đầu tiên các bạn chạy lệnh
git reflog

Ở trong ví dụ này, mình vừa reset về commit 25007198. Commit mới nhất của mình là 6aa1a78d. Bây giờ mình sẽ undo reset commit hiện tại về commit 6aa1a78d bằng cách dùng lệnh reset hard
git reset --hard 6aa1a78d
Trên đây là một số câu lệnh quan trọng và chút ít kinh nghiệm mình có được khi làm việc với git. Hy vọng sau bài này các bạn sẽ không còn vấn đề gì khi làm việc với git nữa. Xin cảm ơn.
Tài liệu tham khảo
https://medium.com/datadriveninvestor/git-rebase-vs-merge-cc5199edd77c









(3 lượt thả tim)



