Git rebase, gộp commits bằng rebase
Note: This post is over 10 years old. The information may be outdated.
Một cách để gộp nhiều commits để git history được đẹp hơn, đó là git rebase
.
Ví dụ ta có git log sau:
$ git log --oneline
22cd1f4 Make grunt task clear @$
778e7be Edit jst grunt's config
4b0db4a Update grunt task, jst per line
6349fc3 Update model, need to do is user can delete there own comments
0aa5434 Fix Sumo code duplicate
134a970 Merge branch 'feedback-member'
3a8544a Facebook login, draft version
....
Nếu bạn muốn gộp 2 commit 22cd1f4
và 778e7be
thành một (2 commits gần nhất). Ta có
$ git rebase -i HEAD~2
pick 778e7be Edit jst grunt's config
pick 22cd1f4 Make grunt task clear @$
# Rebase 4b0db4a..22cd1f4 onto 4b0db4a
#
# 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
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
Git rebase sẽ mở 1 editor trong Terminal. Theo như hướng dẫn:
p, pick
= sử dụng commitr, rework
= sử dụng commit, nhưng đổi commit messagee, edit
= sử dụng commit, nhưng dừng lại để ammend (thay đổi file, message)s, squash
= sử dụng commit, nhưng trộn nó với commit trước đóf, fixup
= giốngsquash
, nhưng xóa commit log messagex, exec
= chạy một command
Dòng thứ 2, bạn thay từ pick
thành f
để xóa commit đó, đưa files thay đổi vào commit trước đó.
Lưu lại và push trở lên server. Sử dụng git push -f
để git ghi đè lại history trên server.
$ git push origin feat/A -f
Hạn chế force push trên branch master
hoặc branch chính để ảnh hưởng các thành viên khác.