假设我的存储库的主分支看起来像这样:
* 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.
|
也就是说,开发从最后一次“好”提交继续进行。即使已经在开发人员中分发了“错误”提交,我还能安全地实现这一目标吗?
答案 0 :(得分:4)
如果您使用git reset --hard
将当前分支重置回上一次良好提交,然后再次进行新提交并再次推送,那么您将从任何已经开始工作的同事那里改变历史记录。糟糕的提交。有一个小型的本地团队知道他们在git中做了什么,这可能不是什么大不了的事。你可以预先警告每个人,做出改变并推动它,然后告诉他们所有人都要在当地进行调整。但是,如果人们在错误提交之后创建了功能分支并进行了合并,那可能会有点痛苦。他们最终不得不重置周围的东西,重新制作合并等等。
你可以在最后一次良好的提交中从后面开始一个新的分支,但这不会从当前分支的历史中删除错误的提交,所以它可能没有帮助。
在这种情况下你可能想要做的只是git revert
错误的提交,这使得新提交与错误提交相反。这不会改变任何人的历史。它只会添加一个修复问题的新提交。有关详细信息,请查看git help revert
。这很简单。