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

合并git中已推送的多个旧提交?,git,Git,我有一堆我已经推过的旧承诺。这些都是一些小的改变,比如打字错误,我想把它们合并在一起,这样我就不会有100次类似的提交了 e、 g.这: 7af8cee5715e266bf249891cf66f832cf8bb6606打字错误 53104d19d1e2eba92baf36b8384100c461e417c1打字错误 9E5AFD2AFC5D6051F568CE3A441EBF087C9EA46打字错误 fb8be7c9c54ae2d9ee3ed15971de49104729e4d6正常 4882

我有一堆我已经推过的旧承诺。这些都是一些小的改变,比如打字错误,我想把它们合并在一起,这样我就不会有100次类似的提交了

e、 g.这:

7af8cee5715e266bf249891cf66f832cf8bb6606打字错误 53104d19d1e2eba92baf36b8384100c461e417c1打字错误 9E5AFD2AFC5D6051F568CE3A441EBF087C9EA46打字错误 fb8be7c9c54ae2d9ee3ed15971de49104729e4d6正常 48828AAF959EE76D77A74DC35B8455542D0DB8B固定链路 6387e73bd692024acbb67c1a843348dd6bd01bb8固定链路 baff3fc602faab37fbd0bf7df9c61ff367121985修复了htaccess问题 2b3e66c19af49030a1da16f9fb7955c4d0f9aa3e修复了htaccess问题 5224690D2A44EC0C4872BEDB54FB55AF75530A修复了iplogging问题


注意:这些不是上一次提交的直接原因,而是几个月前的原因。

您唯一的选择是对提交执行交互式重基,并强制将重写的提交推送到服务器端存储库。我建议您保持历史记录,就好像此后的提交包含合并提交一样

  • 首先,找到要更改的第一次提交的SHA,例如
    522469
  • 检查其他分支是否已自以下日期合并:
    git log--oneline--merges 522469~1
    。如果这会生成输出,请不要运行交互式重基
  • 启动交互式rebase:
    git rebase--interactive 522469~1
  • git将向您显示从
    522469
    开始的提交列表,您可以重新排序。对于要合并的提交,请将
    pick
    命令(第一列)更改为
    squash
    fixup
  • 根据您的心意重新排序和
    squash/fixup
    ,保存文件并关闭编辑器
  • 完成交互式重基后,检查构建
  • 作为最后一步,强制将重写的历史推送到远程存储库:
    git push——强制原始磁头
  • 要记住的一些事情:

    • 如果存在合并提交,交互式重基将删除它们。所以请不要
      git-rebase--interactive
      if#2生成输出
    • 交互式重新基址仅影响当前分支的提交(即可通过
      HEAD
      访问)。基于编辑器窗口中的任何提交的任何分支(
      git branch——包含522469
      )都需要从其重写的对应分支重新设置基础。因此,可能需要比上面显示的更多的工作。选中
      git-rebase--on
    • 将来,当您发现需要更改/修复最近的提交时,请使用
      git commit--amend
      重写
      提交,而不是创建新的提交。另一种选择是
      git-rebase--interactive
      ,提交次数较少(例如不是几个月前的提交,而是2小时前的提交,
      HEAD~10
      ),这可能会减少冲突的可能性

    这需要在存储库中重写历史记录。你会觉得舒服吗?@Thorbjørnravandersen我只是推到一个只有我才能访问的web服务器存储库,所以是的。然后看看progit书的一章。