将github上的多笔commits合并成为一条commit

TortoiseGit的修改上次提交非常方便,所以如果一开始发现某个提交不完整,直接用修改上次提交的方法来修正,不要发起一笔新的提交,这样就不用合并多笔提交了。

最后在推送时选择强制,对应的命令行是git push -f

以下是2016年5月14日发布的内容。

原文发表在ITSPG’S BLOG,为防删除,备份至此。该文演示的操作是合并master分支的最新提交。如果要合并中间几个提交,可能也可以这么做,只是末尾不需要合并的提交就在Step 5-1保持为pick。当然,如果想要合并的提交之后还有很多提交,可能这里的方法就不好用。

为了鼓励前往原站阅读,这里不进行格式化。

翻修github上的README.md的时候,每更改一次都是一条新的commit,多修改几次之后master就拉出长长的一条线,感觉不是很必要,这边教你怎样将远端多笔commits强制合并为一条

这个范例目前仅限于要合并的commits位于尾端,至于要怎样整合中间的commits这个我现在git还不够熟,不敢乱测…

Step 1
git branch squash 先开一个新的分支来储存我们目前master所做的修改”

Step 2
git log 看一下log档,找出想要倒回去的时间点,以这个例子来说是154b5d

commit 154b5d78bcbab2b4513ba02c0104cf45422d6c8a
Author: PG
Date: Fri Dec 7 15:08:18 2012 -0800

Initial commit
Step 3
git reset –hard 154b5d 强制reset

Step 4
git checkout squash checkout之前储存的分支

Step 5
git rebase -i master 将目前的squash分支接到master上

Step 5-1
此时会叫出编辑器画面显示出squash分支与master领先的commits,让你选择如何合并commits,commits出现顺序是从旧的到新的,也就是说最新的commit会出现在编辑器最下面

pick e5ca022 a
pick 1e4fcd3 b
pick 796bef9 c
pick 7897670 d
pick d0b99a9 e
将内容改成以下形式后,存档离开

pick e5ca022 a
s 1e4fcd3 b
s 796bef9 c
s 7897670 d
pick d0b99a9 e
这代表我们要把commit b, c, d合并到commit a,完成合并之后仅会留下commit a与commit e

Step 5-2
接下来会出现若干次编辑器画面,让你输入修改后的commit讯息

# This is a combination of 4 commits.
# The first commit’s message is:

squash a~d test

# This is the 2nd commit message:

# This is the 3rd commit message:

# This is the 4th commit message:
这边主要是让你看一下你选择合并的commit记录,并输入新的commit 讯息,所有#开头的行并不会被算到commit讯息里面

我输入squash a~d test并删除多余的讯息,合并就完成了

Step 6
git checkout master 回到master分支

Step 7
git merge squash 合并squash分支

Step 8
git push –force origin master 强制更新远端的master

发表评论

电子邮件地址不会被公开。

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)