git lap-trinh til - It costs 2 mins to read

Tản mạn về Best Practice khi sử dụng git

Một trong Best Practice của gitBranch Early, Branch Often - Khi code một chức năng mới hay fix một lỗi cụ thể (trừ hotfix) cho sản phẩm, chúng ta tránh tối đa việc code trực tiếp trên nhánh master (Một số team/công ty còn đưa ra quy định rất cụ thể về work flow với git, không cho phép developers push code trực tiếp vào nhánh master khi chưa thông qua code review và tạo pull request) - Tham khảo chi tiết trong bài viết Branch Early - Branch Often.

Best Practice tiếp theo là Do commit early and often, git chỉ chịu trách nhiệm với dữ liệu của chúng ta khi chúng ta commit. Vì vậy, hãy tạo thói quen khi code xong một phần của feature đang làm hay cảm thấy số lượng LOC mình có tác động vào nhiều thì chúng ta nên commit chúng để dễ bề theo dõi và restore sau này. Việc này rất hữu ích vì khi tạo nhiều checkpoint như vậy, bạn kiểm soát được những gì bạn đã và đang làm. Và nếu không may có lỗi xảy ra thì dễ dàng xác định chúng xuất phát từ commit nào (git bisect). Tuy vậy, hạn chế của việc commit quá thường xuyên là khiến git history bị đội lên với những commit nhỏ và thừa thãi. Giải pháp cho vấn đề này là khi code hoàn chỉnh một branch, bạn có thể rewriting git history bằng git rebase --interactive để giữ history luôn được gọn gàng trước khi push lên remote repository.

Rewriting history

git commit –amend

git commit --amend sử dụng trong trường hợp sau khi vừa commit xong, bạn phát hiện thiếu sót nào đó nên cần bổ sung vào commit trước hoặc là đơn giản là bạn cần sửa lại commit message. amending replace toàn bộ commit trước và thay nó bằng commit mới (có thể bổ sung changeset và sửa lại commit message).

Nguyên tắc cần nhớ: Không bao giờ sử dụng git commit --amend một khi commit trước đã được push lên remote repository bởi vì đều này sẽ gây rắc rối cho những thành viên khác trong team của bạn.

git rebase –interactive

Cú pháp:

git rebase -i [base]

Ví dụ muốn rebase lại 4 commit gần nhất của nhánh hiện tại thì

git rebase -i HEAD~4
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell

Tham khảo thêm bài viết của Thoughtbot.

Dương Vì Phát