Memo Git Git Git - Uncreative
Git
54
White

Nguyen Duy Ta viết ngày 10/07/2015

Mình xin phép chia sẻ một số kinh nghiệm khi làm việc với git trong dự án của mình. Tuy vậy mọi thứ chỉ là tương đối, có thể những chia sẻ này phù hợp hoặc không phù hợp với bạn. Mong các bạn đóng góp ý kiến.

Tạo nhánh

  • Chọn tên nhánh ngắn
  • Giải thích ngắn ngọn, rõ ràng về task đang làm
  • Bắt đầu bằng ID của task
  • Dùng gạch giữa để tạo khoảng cách giữa các chữ Sh # Good git checkout -b portal-254-crud-user # Bad git checkout -b fix_user
  • Khi có nhiều người cùng làm việc trong một feature nào đó thì cần phải tạo một nhánh chung cho team. Và mỗi cá nhân sẽ tạo ra một nhánh riêng từ nhánh chung đó.
  • Những branch đã được merge rồi thì nên xóa bỏ trên remote đi. Giữ lại thì cũng không có ý nghĩa gì cả vì nếu bạn có sửa thì cũng không thỉ sửa trực tiếp trên nhánh đó được. # Để xem những nhánh đã được merge git branch --merged | grep -v "*"

Commits

  • Mỗi một thay đổi logic code thì bạn nên commit một lần, không chung một commit cho nhiều thay đổi logic code. Ví dụ: không được vừa fix bugs vừa tối ưu code trong cùng một commit.
  • Giải thích rõ ràng cho sự thay đổi đó.
  • Không được chia một thay đổi logic đơn giản ra nhiều commit khác nhau. ### Messages
  • Thay vì viết meassage cho commit trực tiếp trên console, bạn nên sử dụng một công cụ editor để viết message cho commit. SH # Good git commit # Bad git commit -m "message"

Revision Selection

Mỗi commit trong git đều được định danh. Hiểu về cách mà git định danh một commit là rất quan trọng khi chúng ta muốn có bất kỳ hành động nào tới commit đó.

Git cho phép bạn định danh cụ thể một commit bằng nhiều cách như sử dụng mã Hashes, short SHA-1, HEAD~n, HEAD@{m}, HEAD^n... Về cách sử dụng các bạn nên tham khảo tại git-scm/book hoặc tại đây

Với các định danh hashes, short SHA-1, HEAD@{m} thì chúng ta có thể dễ dàng tìm thấy chúng bằng cách sử dụng git log, git log --oneline hoặc git reflog.

Riêng với hai cách định danh HEAD~HEAD^ mình xin giải thích ngắn gọn như sau:

  • HEAD~n sẽ định danh cho parrent commit thứ n.
    alt text

  • HEAD~ chỉ định danh cho commit trên cùng một nhánh, nếu bạn muốn định danh cho commit thuộc nhánh khác thì bạn phải dùng tới HEAD^. Hãy đi vào minh họa sau để hiểu rõ hơn.

alt text

Git không vô cớ tạo ra nhiều cách định danh như vậy. Mỗi cách đều mang một mục đích nhất định. Điều mà chúng ta cần đó là hãy dùng nó khi đã hiểu về nó. Để hiểu được chúng thì bạn hãy thử đi =))

git reflog

Nhân tiện ở phần trên mình có nhắc tới git reflog. Mình xin phép giải thích qua về câu lệnh này. Đây là một công cụ giúp Git trở nên an toàn hơn vì nó sẽ ghi lại toàn bộ các hành động của bạn với git.

400e4b7 HEAD@{0}: checkout: moving from master to HEAD~2
0e25143 HEAD@{1}: commit (amend): Integrate some awesome feature into `master`
00f5425 HEAD@{2}: commit (merge): Merge branch ';feature';
ad8621a HEAD@{3}: commit: Finish the feature

Có rất nhiều bạn hỏi mình rằng bạn đấy đã lỡ tay xóa bỏ branch, hoặc bạn rebase và mất hết code hiện tại, các bạn không biết phải làm thế nào để lấy lại code đã mất đó. Có người thì rất "trâu bò" bằng cách code lại từ đầu. Nhưng nếu bạn đã hiểu về reflog thì mọi chuyện sẽ trở nên đơn giản hơn nhiều. Bạn có thể checkout, rebase, revert, reset... lại đúng bước mà bạn gặp vấn đề. Khi đó mọi thứ đã trở về trạng thái trước khi bạn gặp lỗi và bạn có thể sửa lỗi.

QUOTE

Bài viết khá lộn xộn do ý tưởng là thấy gì hay và mọi người hay mắc phải thì viết nên mong mọi người bỏ quá cho (ok)

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

Nguyen Duy Ta

3 bài viết.
2 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
8 2
Bài viết miêu tả ngắn ngọn về một số thủ thuật về git mà mình đã sử dụng để mọi người tham khảo. git difftool và git mergetool Đây là hai câu lệ...
Nguyen Duy Ta viết 3 năm trước
8 2
Bài viết liên quan
White
49 8
Tôi xin tổng hợp các cách dùng git stash tôi hay sử dụng Lưu lại thay đổi Git stash được sử dụng khi muốn lưu lại các thay đổi chưa commit, thườ...
BB viết 3 năm trước
49 8
White
13 2
Xin chào các bạn. Chắc hẳn mỗi chúng ta đều đã từng phát triển app sử dụng API của bên thứ 3, và chắc mọi người đều biết là hầu hết các API service...
Hải Nguyễn viết hơn 1 năm trước
13 2
White
5 7
Thông thường một feature mới thường được làm trên một nhánh (branch) riêng và thường xuyên pull các cập nhật từ nhánh master trong quá trình đấy. S...
Lơi Rệ viết gần 3 năm trước
5 7
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
2 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á!