0

假设我的存储库的主分支如下所示:

* 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.
|

也就是说,开发从最后一个“好”提交继续。即使“错误”提交已在开发人员之间分发,我能否安全地实现这一目标?

4

1 回答 1

4

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

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

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

于 2013-10-07T17:57:22.163 回答