合并commit

前提:不要对任何已经提交到公共仓库中的 commit 进行修改(你自己一个人玩的分支除外)

场景:有时候开发一个功能, 修修补补 commit 了很多次 ,过多的 commit 会显得很复杂。
或者代码写好后,发现有几个commit有些多余,可以合并或者干脆删除。
所以,在这种情况下。我们需要整理一下 commit 的记录,让我们更好的管理提交记录。

1 命令 git rebase -i

这里主要用到rebase命令:

git rebase -i [startpoint] [endpoint]

其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

2 步骤

假设这里要把 d c new_b合并。
① 使用 git log 命令查看提交历史:

②执行命令

git rebase -i 8b2c5f3 
#或者 
git rebase -i HEAD~3
#如果只是合并中间的new_b c
git rebase -i 8b2c5f3 b27e655

③ 编辑commit之前的命令

  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我需要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)

根据我们的需求,我们将commit内容编辑如下:

④ 编辑注释修改页面

比如 我要修改为 "new_b_c_d",这把"new_b"编辑为"new_b_c_d",然后删除 "c" "d".确认退出后

再次查看log

3仅两个commit的时候,怎么合并

使用--root,则从根commit开始

git rebase -i --root

结果如图:

剩下操作同上。

4 同步远程仓库

如果要同步远程仓库,则强制push

git push --force
#或者
git push origin master -f
懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
原文地址:https://www.cnblogs.com/Rainingday/p/14533706.html