为了账号安全,请及时绑定邮箱和手机立即绑定

在推送Git之前合并多个提交

在推送Git之前合并多个提交

Git
精慕HU 2019-12-07 13:58:50
我在本地存储库上有一堆主题上相似的提交。我想在将其推送到远程服务器之前将它们组合为一个提交。我该怎么做?我认为rebase是这样做的,但我无法理解这些文档。
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

您要执行的操作在git中称为“压缩”。执行此操作时有很多选择(太多吗?),但是如果您只想将所有未按下的提交合并到一个提交中,请执行以下操作:


git rebase -i origin/master

这将打开一个文本编辑器(-i用于“交互式”),其文件如下所示:


pick 16b5fcc Code in, tests not passing

pick c964dea Getting closer

pick 06cf8ee Something changed

pick 396b4a3 Tests pass

pick 9be7fdb Better comments

pick 7dba9cb All done

将第一个更改pick为squash(或s),第一个除外:


pick 16b5fcc Code in, tests not passing

squash c964dea Getting closer

squash 06cf8ee Something changed

squash 396b4a3 Tests pass

squash 9be7fdb Better comments

squash 7dba9cb All done

保存文件并退出编辑器。然后将打开另一个文本编辑器,使您可以将所有提交中的提交消息合并为一条大提交消息。


瞧!谷歌搜索“ git squashing”将为您提供所有其他可用选项的解释。


查看完整回答
反对 回复 2019-12-07
?
莫回无

TA贡献1865条经验 获得超7个赞

如果提交次数很多,而您只想压榨最近的X次提交,请找到要开始压榨的提交的提交ID,然后执行


git rebase -i <that_commit_id>

然后按照leopd的答案所述进行操作,将除第一个之外的所有picks 更改为squashes。


范例:

871adf OK, feature Z is fully implemented      --- newer commit --┐

0c3317 Whoops, not yet...                                         |

87871a I'm ready!                                                 |

643d0e Code cleanup                                               |-- Join these into one

afb581 Fix this and that                                          |

4e9baa Cool implementation                                        |

d94e78 Prepare the workbench for feature Z     -------------------┘

6394dc Feature Y                               --- older commit

您可以执行以下操作(写入提交次数):


git rebase --interactive HEAD~[7]

或者这(写最后的哈希提交你不希望壁球):


git rebase --interactive 6394dc


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 615 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信