壁球首先N提交git历史/保持其余的原样

时间:2016-01-28 15:40:05

标签: git rebase

考虑以下问题:

  • 私有项目在早期阶段包含一些凭据
  • 我们想要开源
  • 我们需要摆脱历史记录中的凭据
  • 凭据不在单个文件中,而在代码中
  • 包含多个合并,拉取请求等的复杂历史记录。

我想做什么:

将所有从root用户提交到 clean 状态的任意提交压缩为一个大的初始提交'。

当我这样做时:

git rebase -i --root

将第一次提交压缩在一起:

pick Initial commit \
fixup dirty1        |
fixup dirty2        | Squash these to one, to remove credentials.
fixup dirty3        |
fixup clean1        /
pick clean2
pick clean3
...
...

我必须重新设置所有内容并在此之后再次解决所有合并冲突。

如何在不必解析整个历史记录(包括N + 1提交后的合并冲突)的情况下压缩前N个提交。

2 个答案:

答案 0 :(得分:0)

您可以使用git-rerere重复使用相同的冲突解决方案。

唯一的缺点是,在启用重新启动之后,您必须再次解决它们,然后才能自动重用这些解决方案。

答案 1 :(得分:0)

您可以使用 git rebase -Xtheirs -i --root。 将第一次提交保留为选择(正如您所做的那样)并将第二行到第 N 行的第一个单词更改为 squash

-Xtheirs 将为您管理合并问题,我想这就是您在这里寻找的东西。