重写git repo历史记录而不进行所有提交

时间:2015-02-24 19:18:01

标签: git

我想在git存储库中崩溃一些丑陋的合并,而不必重新设置自那以后发生的所有提交。例如:

* sha0                       *
| ... ~50 commits            | ... ~50 commits
*                            *
* sha1             -->       * sha1
|\                           * sha2
* *                          *
* |\                         ...
|/  *
*   |
*  /
| /
|/
* sha2
*
...

最好的方法是做什么?

编辑:

在其中一个回复中尝试了一个建议后,我意识到我应该澄清:

  • 我想重写sha1和sha2之间的历史
  • 我需要保留sha0和sha1之间的提交

1 个答案:

答案 0 :(得分:1)

最终你将最终变基。一种简单的方法是在sha1创建临时分支,然后创建soft reset,然后重新设置。

git checkout -b temp_branch sha1

git reset --soft sha2

git commit -m <message>

git checkout master

git rebase --onto temp_branch sha1

git branch -d temp_branch