1. 1. 修改刚刚提交的 Commit Message:commit –amend
  2. 2. 合并前几条 Commit 为 1 个 Commit:git rebase -i HEAD~x

一般场景的Git使用流程就不多说,多数公司都是基于 Git 用 Git Flow 模型来组织代码协作。下面记录两个在工作中觉得很称手的小命令。

修改刚刚提交的 Commit Message:commit –amend

刚刚提交代码忘记或者写错了 Commit Message,想改一下。git commit –amend ,然后修改 message 即可,只会改变 message,代码不会受到影响。

合并前几条 Commit 为 1 个 Commit:git rebase -i HEAD~x

有时候提交了太多 Commit(比如在功能分支中途切去 bug 分支修 bug,切之前肯定 Commit 保存下功能分支的进度,不知不觉制造了很多零碎 Commit),想把它们合并一下。
git rebase -i HEAD~4 ,就会弹出类似下面的编辑界面。
可以看到有 4 条 pick xxx xxx ,每条就对应着你的一条 Commit。下面还有注释的文本写了 pick 这些命令代表什么意思。最实用的就是 pick(使用/保留 这个 Commit) 和 squash(合并这个 Commit 到上次 Commit)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pick 5e187c7dbe8    add center style indent  
pick 6d577eb3440 add center style
pick f9b9508a3ab add center style
pick 111ab9cc261 update templates
# Rebase 150a643..2fad1ae onto 150a643
#
# 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

所以如下编辑一下,:wq 保存并退出就合并到只剩 5e187c7dbe8 那条了,如果有冲突的话按平常 merge 和 rebase 那样解决即可。

1
2
3
4
pick 5e187c7dbe8    add center style indent  
squash 6d577eb3440 add center style
squash f9b9508a3ab add center style
squash 111ab9cc261 update templates