如何在不丢失数据的情况下修复git commit history?

时间:2017-01-14 21:05:19

标签: git

我做了很多提交来测试我的存储库。现在我想修复我的历史而不丢失​​数据。我的历史看起来像这样:

A -> B -> C -> TEST D -> TEST E

但它应该是这样的:

A -> B -> C (C + TEST D + TEST E)

我该怎么办? rebasestash可以帮助我吗?

UPD 好的,这是我的提交历史记录:

commit 9f2c2e66d344aa27a5e681eb64c84738f2cd1d49
Author: babobka <babobka@bk.ru>
Date:   Sat Jan 14 23:35:36 2017 +0300

    Fixed files

commit 9ab55a4e4352daa9e5c27e9243d79a8c14dd6551
Merge: b52872c 856ee3f
Author: bbk <dolgopolov.work@gmail.com>
Date:   Sat Jan 14 23:29:16 2017 +0300

    Merged in develop (pull request #1)

    New tests. New project structure. FindBugs plugin.

commit 856ee3fb4725564c1c5c976eacadb6e21aa2b937
Author: babobka <babobka@bk.ru>
Date:   Sat Jan 14 23:24:02 2017 +0300

    New tests. New project structure. FindBugs plugin.

commit b52872c300bde67154cec3b732755a47f9ff76cd
Author: babobka <babobka@bk.ru>
Date:   Mon Jan 9 23:36:02 2017 +0300

    Very big refactor.Can not remember what was done.

commit 0b330267150db40fb814bfc21387762d80a99e44
Author: babobka <babobka@bk.ru>
Date:   Tue Jan 3 01:13:05 2017 +0300

    First commit

我做了git rebase -i 9ab55a4e4352daa9e5c27e9243d79a8c14dd6551 -m 'Rebasing',但我看不到任何变化。历史也一样。

1 个答案:

答案 0 :(得分:1)

您可以使用rebase命令

的交互模式
git rebase -i HEAD~2

其中HEAD~2 - 2是你需要参与运行的提交的nuber。 互动模式为您提供简短的帮助。 标记提交您需要加入的squash(替换为pick字)。

提示:第一次更好地创建分支并在分离的brach中执行。在分离的分支中,您可以检查结果以更好地了解rebase的工作方式。如果您遇到一些麻烦或意外行为,可以通过checkout原始分支回滚。