将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

发表评论

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

 剩余字数

ea dz dy dx dw dv du dt ds dr dq dp dn dm dl dk dj di dh dg df de dd dc da cz cy cx cw cv cu ct cs cr cq cp co cn cm cl ck cj ci ch cg cf ce cd cc cb ca bz bx bw bv bu bt bs br bq bp bo bn bm bl bk bj bi bh bg bf bd bc bb ba az ay ax aw av au ar aq ap ao am al ak aj ai ah ag af ae ad ac ab /跳跳 /抓狂 /快哭了/ /微笑/ /奋斗 /呲牙/ /吐