合并已经推送的git中的多个旧提交?

时间:2015-01-26 11:10:04

标签: git

我已经推出了一堆旧的提交。这些是小变化,例如拼写错误',我想将它们合并在一起,这样我就没有100次类似的提交。

e.g。这样:

  

7af8cee5715e266bf249891cf66f832cf8bb6606错字   53104d19d1e2eba92baf36b8384100c461e417c1错字   9e5afd2afc5d6051f568ce3a441eebf087c9ea46错字   fb8be7c9c54ae2d9ee3ed15971de49104729e4d6 ok   48828aaf959ee76d77a74dc35b8455542d0dbb8b固定链接   6387e73bd692024acbb67c1a843348dd6bd01bb8固定链接   baff3fc602faab37fbd0bf7df9c61ff367121985修复了htaccess问题   2b3e66c19af49030a1da16f9fb7955c4d0f9aa3e修复了htaccess问题   5224690d2a44ec0c4872bedb3b54fb55af75530a修复了iplogging问题

注意:这些不是最后一次提交的后面,这些是几个月前的。

1 个答案:

答案 0 :(得分:2)

您唯一的选择是在提交上执行交互式rebase,并将重写的提交强制推送到服务器端存储库。如果从那时起的提交包含合并提交,我建议您保留历史记录。

  1. 首先,找到您要更改的第一个提交的SHA,例如522469
  2. 检查是否已合并其他分支:git log --oneline --merges 522469~1。如果这会生成输出,请不要运行交互式rebase。
  3. 启动交互式rebase:git rebase --interactive 522469~1
  4. git会显示从522469开始的提交列表,您可以重新排序。对于要融合的提交,请将pick命令(第一列)更改为squashfixup
  5. 重新排序和squash/fixup您心中的内容,保存文件并关闭编辑器。
  6. 交互式rebase完成后,检查您的构建。
  7. 作为最后一步,强制将重写的历史记录推送到远程存储库:git push --force origin HEAD
  8. 要记住的一些事情:

    • 如果有合并提交,交互式rebase将删除它们。因此,如果#2生成输出,请不要git rebase --interactive
    • 交互式rebase仅影响当前的分支机构'提交(即HEAD可到达)。任何基于编辑器窗口(git branch --contains 522469)中任何提交的分支都需要从重写的对应物中重新定位。因此,可能涉及的工作量比上面显示的要多。查看git rebase --onto
    • 将来,当您发现需要更改/修复最近的提交时,请使用git commit --amend重写HEAD提交,而不是创建新提交。另一种选择是git rebase --interactive提交较少(例如,不是几个月前,但比如2小时前,HEAD~10),这可能会减少冲突的可能性。