Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Vài điều hay ho về Git
1. Định nghĩa
Dù gì thì cũng nên nói về định nghĩa nó trước. Tại sao phải có git.
Chắc dev nào cũng dùng git rồi nên mình cũng không nói kỹ về định nghĩa nữa. Đại loại git dùng để quản lý code và làm việc nhóm. Khi một mình một ngựa thì không sao, thích sửa trời sửa đất gì cũng được nhưng khi có đội nhóm thì việc có một cái quản lý đống code của nhóm rất là cần thiết, nó tránh được việc chồng chéo code, conflict các kiểu.
2. Luồng sử dụng git hằng ngày của coder
Mình sẽ trình bày một luồng của một coder rất hay sử dụng hằng ngày trong thực tiễn.
Thường thì khi coder vào nhóm thì sẽ clone dự án về (thường có sẵn rồi).
Nhánh để cả nhóm code thường để là develop
, có thể nhánh khác tùy nhóm thống nhất. Nếu chưa đứng ở nhánh develop
thì có thể dùng git checkout develop
để về nhánh.
1. git pull origin develop
Việc này là cần thiết trước khi code một chức năng hoặc fix bug. Vì nhóm nhiều người code chung nên trước khi làm chức năng mới thì cứ phải pull code mới nhất về để tránh conflict sau này.
2. git checkout -b task/change-file-index/THAIVD-1992
Tạo nhánh mới, trong đó task/change-file-index/THAIVD-1992
là tên nhánh. Khi làm các chức năng mới hoặc fixbug thì phải tạo nhánh mới chứ không code trực tiếp ở nhánh develop
Về quy tắc đặt tên thì cũng tùy nhóm quy định, như nhóm mình sẽ là chức-năng/nội-dung/mã-task
- Chức năng: task hoặc feature hoặc hotfix hoặc fix
- Nội dung: thì làm định làm gì thì ghi cái đó vào, chú ý là tiếng anh cho chuyên nghiệp
- Mã task: Hiện tại source code đang quản lý trên backlog nên có mã là
THAIVD-1992
chẳng hạn
3. git status
Sau khi code xong xuôi thì git status
để kiểm tra tình hình đang như thế nào, việc git status
mình hay làm thường xuyên, cho chắc.
4. git diff index.php
Trước khi commit lên thì mình hay dùng cái này. Dùng để check xem mình đã sửa những gì
The AWS Access Key Id you provided does not exist in our records.
5. git add index.php
Để thêm file này trước khi commit. Nếu muốn thêm tất cả các file sửa đổi thì có thể git add .
cho nhanh
6. git commit -m "Add text to file index"
Sau khi thêm thì mình commit lên, nội dung message thì mình làm gì thì ghi nấy, tiếng anh cho chuyên nghiệp
7. git push --set-upstream origin task/change-file-index/THAIVD-1992
Push code lên nhánh
8. Tạo Pull Request để người khác review trước khi merge vào nhánh develop
Việc này quan trọng. Vì khi coder code trước khi merge vào nhánh chung develop
thì phải tạo Pull Request
để những người khác trong team có thể review xem code có lởm không, sai tính năng không. Việc review này cần người có kinh nghiệm
9. Merge vào develop
Việc này cần người có quyền trong team làm.
3. Một số điều hay ho
Thì nói chung mà làm thành thạo theo luồng cơ bản trên thì cũng đủ dùng cho công việc hằng ngày nhưng đời thì không như mơ, đôi khi cũng có vài tai nạn bất ngờ, và cũng có nhiều cái gọi là hay ho nên biết.
1. clone dự án nhanh hơn
Với mạng mạnh thì okie, chứ lơm lởm thì có thể nghĩ đến việc dùng git clone --depth 1
thay cho git clone
. Việc này giúp tăng Performance.
Như dưới thì cùng clone một dự án thì số lượng objects có sự khác biệt. 26818 so với 1796, đâu đó gần 15 lần :D
https://www.perforce.com/blog/vcs/git-beyond-basics-using-shallow-clones
2. File .gitignore
Có thể hiểu đơn giản là thằng git sẽ bỏ qua file hoặc một tập các file trong project của chúng ta khi commit và push lên repository. Thường thì cấu hình riêng trên local, hoặc là những file tự sinh ra khi build project
/node_modules
/public/hot
/public/storage
/public/docs
/storage/*.key
/vendor
/.idea
/.vscode
/.data
/.vagrant
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.env
.phpunit.result.cache
.DS_Store
/.sonarlint
/.scannerwork
/php-config/*
nohup.out
Giờ muốn git bỏ qua file nào thì cứ thêm vào file .gitignore
là được
3. git alias
https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases
Hiểu nôm na là viết lại mấy cái lệnh cho nó gọn
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
Nghĩa là giờ thay vì git status
thì viết git st
Một ngày viết tắt nhiều cũng đỡ phết
4. Xóa các branch đã được merged
Thường thì mỗi chức năng chúng ta sẽ tạo một branch mới để code, sau khi được merged vào nhánh chính (Của mình ở đây là develop) thì sẽ không code những branch đó nữa.
Như vậy sẽ cần xóa branch đi cho nó đẹp. Cũng có thể đi tìm từng con một rồi xóa nhưng mà tầm nhiều nhiều thì cũng mệt phết.
Có cách nhanh hơn nhiều. Đứng ở branch chính (develop) rồi
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
5. Sửa hoặc gộp các commit
Khi có chỉnh sửa mà mình mong muốn ghi đè lên commit trước thì sử dụng git commit --amend
và viết lại commit message.
Còn nếu không cần viết lại message thì có thể dùng git commit --amend --no-edit
Mục đích của việc này là không tạo nhiều commit trong cùng 1 chức năng. Thường thì một chức năng chỉ có một commit duy nhất.
Trong trường hợp lỡ tạo nhiều commit rồi giờ muốn gộp chúng thành một thì dùng
git rebase -i HEAD~2
Khi mình gõ git log --oneline
thì có 2 commit đang được tạo ra so với branch develop
, mình sẽ gộp 2 commit thành một
Nó cũng viết rõ ràng rồi, mình sẽ để commit đầu tiên là pick
, các commit sau là squash
(Có thể viết tắt là s)
Thoát ra đoạn chọn này thì đến phần sửa message của commit, giữ 1 cái còn lại thêm # để comment cũng được
6. Lấy lại code
Nói chung là cuộc đời ai chả có lúc lầm lỡ, cho nên trong lúc code cũng có nhiều lúc nhỡ tay.
- Đã sửa code nhưng chưa add, muốn đưa tất về trạng thái ban đầu
git checkout -- .
- Đã lỡ add chưa commit, muốn đưa về lúc chưa add
git reset HEAD
- Đã commit nhưng chưa push, muốn đưa về lúc chưa commit
git reset HEAD~1
- Đã push muốn đưa về lúc chưa push
git revert HEAD~1..HEAD
7. git reflog
để lấy lại branch đã lỡ xóa
Việc xóa nhánh cũng hi hữu xảy ra nhưng biết đâu bất ngờ xóa đi và muốn lấy lại
git br -D task/test
Sau khi xóa mất nhánh mình sẽ dùng lệnh git reflog
Lúc này ở chỗ id 493137a7
có thể hiện việc xóa nhánh.
Giờ muốn lấy lại thì git branch task/test2 493137a7
. Lúc này tên branch mình có thể đổi tùy ý. Miễn là đúng id là được.
Tạm thời là hết rồi. Chắc còn rất rất nhiều điều hay về Git nữa, mọi người comment chia sẽ nhé







