The first two commits are local commits.
View git log:
$ git log
yi@C02D37L9MD6R ~/code/git/test-git master git status On branch master Your branch is up to date with 'origin/master'. commit 5ff173eadd1090b28f97b80b2a8ec1bcc74eb21b (HEAD -> master) Author: zhaoyi Date: Thu Nov 26 11:58:52 2020 +0800 change 2 commit b0d9c417ac5f860bcebcbd8d7cff24c3e25ecb29 Author: zhaoyi Date: Thu Nov 26 11:58:38 2020 +0800 change 1 commit 62e7bba8eb4a2e37860c34d594dd64f26093d74c (origin/master) Author: zhaoyi Date: Mon Nov 9 20:11:39 2020 +0800 c3 commit 9537547f347f90ebba512dde619e0f502867936a Author: zhaoyi Date: Mon Nov 9 20:10:30 2020 +0800 c1
Now we want to merge those two commits into a single commit.
$ git rebase -i HEAD~2
Pick the commit to be select as the final commit, use
s to mark those commits which are enrolled in the final commit.
pick b0d9c41 change 1 s 5ff173e change 2 # Rebase 62e7bba..5ff173e onto 62e7bba (2 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 # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified). Use -c <commit> to reword the commit message. # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST.
edit commit message:
# This is a combination of 2 commits. # This is the 1st commit message: change 1 # This is the commit message #2: change 2 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Thu Nov 26 11:58:38 2020 +0800 # # interactive rebase in progress; onto 62e7bba # Last commands done (2 commands done): # pick b0d9c41 change 1 # squash 5ff173e change 2 # No commands remaining. # You are currently rebasing branch 'master' on '62e7bba'. # # Changes to be committed: # modified: README.md #
View commits again:
commit 00dfb031b21c9820abfcb8ec936d544f5dc50919 (HEAD -> master) Author: zhaoyi Date: Thu Nov 26 11:58:38 2020 +0800 change 1 change 2 commit 62e7bba8eb4a2e37860c34d594dd64f26093d74c (origin/master) Author: zhaoyi Date: Mon Nov 9 20:11:39 2020 +0800 c3 commit 9537547f347f90ebba512dde619e0f502867936a Author: zhaoyi Date: Mon Nov 9 20:10:30 2020 +0800 c1 commit 2c0c7a703d180791e65d82c65192ed1e7ef03efe Author: zhaoyi Date: Mon Nov 9 20:09:02 2020 +0800