Vài điều hay ho về Git
Git
63
White

Văn Đức Thái viết ngày 08/06/2020

alt text

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).
alt text
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
alt text
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

alt text
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é

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Văn Đức Thái

22 bài viết.
109 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
29 18
1. Tản mạn ngoài lề (Ảnh) MySQL với DB thì có cái quần què gì chứ? Đọc thôi để thấy cũng vài cái hay ho và này nọ. 2. MySQL: MyISAM & InnoDB & ...
Văn Đức Thái viết hơn 2 năm trước
29 18
White
27 13
1. Tản mạn ngoài lề Khuya vật vã. Chẳng ngủ được. Mà chẳng biết làm gì giữa cái lúc dở dở ương ương này. Viết blog vậy :(. Bài viết dành cho các...
Văn Đức Thái viết hơn 2 năm trước
27 13
White
19 3
1. Tản mạn ngoài lề (Ảnh) Khi gặp một vấn đề trong cuộc sống bạn sẽ làm gì? Người yêu đá đít, cuối tháng hết tiền lương, sếp đì trên đi xuống, bl...
Văn Đức Thái viết hơn 2 năm trước
19 3
Bài viết liên quan
White
4 3
Xin chào mọi người, bài viết hôm nay sẽ liên quan đến một công cụ quản lý source code vô cùng quen thuộc đối với developer hiện nay đó chính là Git...
Julian Dong viết 9 tháng trước
4 3
White
2 0
Hôm nay group review một cái tài liệu về version control với mấy đồng nghiệp, một người bạn bảo: Cái đó có gì đâu mà ông viết có vẻ khó khăn vậy,...
Long Nguyễn Xuân viết 2 năm trước
2 0
White
12 0
Làm việc với git submodule (Ảnh) Đôi lúc ta cần phải sử dụng các repo khác như là một module của dự án hiện tại, nhưng ta lại muốn quản lý nó riê...
Tân Nguyễn viết hơn 2 năm trước
12 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
22 bài viết.
109 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!