[TIL] Squash/fixup commits trước khi merge

Trước giờ mình dùng Gitlab nên việc squad commit chỉ cần tick là được.

Từ khi chuyển qua dùng bitbucket, mình cũng… không biết phải squash‌ hoặc fixup thế nào trước khi merge. Thành ra hơi lúng túng. Nếu bạn cũng như mình, thì bài viết này là dành cho bạn.

Squash và fixup

  • Squash và fixup đơn giản là việc bạn gom một đống commits về 1 commit duy nhất. Giúp việc tracking dễ hơn, history trông đẹp hơn.
  • Squash là gom commit vào, sau khi gom thì viết lại commit message.
  • Fixup là gom commit vào, lấy commit đầu tiên làm commit message.

How to

Giả sử mình đang ở branch blog, có 3 commit

95008fe (HEAD -> blog) commit 3
e04c3ca commit 2
574ef37 commit 1

Bây giờ muốn merge vào, mình sử dụng lệnh

git rebase -i HEAD~3 

Bản chất việc squash hay fixup là rebase trên chính nhánh hiện tại.

Sau khi gõ lệnh, sẽ hiện ra màn hình nano hay vim tùy theo config. Như mình là nano

  GNU nano 7.2                    /home/phongdo/workspace/code/learn/git/.git/rebase-merge/git-rebase-todo                              
pick 574ef37 commit 1
pick e04c3ca commit 2
pick 95008fe commit 3

# Rebase b184d5c..95008fe onto b184d5c (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit

Thực hiện sửa 2 chữ pick ở commit 2 và commit 3 thành chữ s

pick 574ef37 commit 1
s e04c3ca commit 2
s 95008fe commit 3

# Rebase b184d5c..95008fe onto b184d5c (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message

Bấm ctrl + X, hiện ra bảng hỏi đồng ý không thì gõ Y và enter.

Nếu bạn fixup thì xong rồi, còn squash sẽ hiện ra thêm màn hình cho bạn edit commit message

# This is a combination of 3 commits.
# This is the 1st commit message:

commit 1

# This is the commit message #2:

commit 2

# This is the commit message #3:

commit 3

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

Ở đây có 3 commit message của commit 1, commit 2 và commit 3. Bạn comment (thêm # ở đầu) vào cái nào không dùng tới. Có thể sửa message luôn.

Ví dụ mình sẽ sử dụng commit message của commit 1 và thêm vào đấy “hihi”, mình sẽ làm như sau

# This is a combination of 3 commits.
# This is the 1st commit message:

commit 1hihi

# This is the commit message #2:

#commit 2

# This is the commit message #3:

#commit 3

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

Ctrl + X, gõ Y, enter lưu lại là xong.

Kết

Cảm ơn bạn, vì đã đọc bài. ^^

Chúc bạn squash và fixup thành công.

Have a nice day. ^^

Bình luận về bài viết này