Git:从之前的提交继续存储库历史记录

时间:2013-10-07 17:51:24

标签: git

假设我的存储库的主分支看起来像这样:

* commit 75e259944814a102d6362eaf42fd4ff09d839865
|
|       Bad commit
|
* commit 0307a5c4e623c584898c44d243a50bb02c91aa9e
|
|       Good commit 1.
|
* commit 98ef0e69e3e5cd51ff5e24c1df616703272c5a79
|
|       Good commit 1.
|

错误提交已被推送到中央存储库并进行分发。我想从最后一次好的提交中继续历史。当我完成后,我希望历史看起来像

* commit 0626f793ff7ba847e7663fe88de6c6a2d597dc73
| 
|       Continuing development.
| 
| * commit 75e259944814a102d6362eaf42fd4ff09d839865
| | 
| |     Bad commit
| |
| |     
| |
* | commit 0307a5c4e623c584898c44d243a50bb02c91aa9e
|/ 
|       Good commit 2.
|
|       
|
* commit 98ef0e69e3e5cd51ff5e24c1df616703272c5a79
|
|       Good commit 1.
|

也就是说,开发从最后一次“好”提交继续进行。即使已经在开发人员中分发了“错误”提交,我还能安全地实现这一目标吗?

1 个答案:

答案 0 :(得分:4)

如果您使用git reset --hard将当前分支重置回上一次良好提交,然后再次进行新提交并再次推送,那么您将从任何已经开始工作的同事那里改变历史记录。糟糕的提交。有一个小型的本地团队知道他们在git中做了什么,这可能不是什么大不了的事。你可以预先警告每个人,做出改变并推动它,然后告诉他们所有人都要在当地进行调整。但是,如果人们在错误提交之后创建了功能分支并进行了合并,那可能会有点痛苦。他们最终不得不重置周围的东西,重新制作合并等等。

你可以在最后一次良好的提交中从后面开始一个新的分支,但这不会从当前分支的历史中删除错误的提交,所以它可能没有帮助。

在这种情况下你可能想要做的只是git revert错误的提交,这使得新提交与错误提交相反。这不会改变任何人的历史。它只会添加一个修复问题的新提交。有关详细信息,请查看git help revert。这很简单。