2013-10-07 60 views
0

比方说,我的仓库的主分支看起来是这样的:的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. 
| 

也就是说,发展从过去的“好”的承诺继续。即使在开发者中分发了“坏”提交,我能否安全地实现这一点?

回答

4

如果您将当前分支重新设置为git reset --hard的最后一次良好提交,然后再次进行提交并再次推送,那么您将从任何已开始工作在错误提交之上的同事处更改历史记录。有了一个知道他们在做什么的小本地团队,这可能不算什么大事。你可以提前警告所有人,做出改变并推动它,然后告诉他们所有人在本地进行调整。不过,如果人们在不良提交之后创建了功能分支并进行了合并,那可能会有点痛苦。他们最终将不得不重置合并,重新合并等。

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

在这种情况下你可能想要做的只是简单地使用git revert,表示提交失败,这会导致与提交失败相反的新提交。这不会改变任何人的历史。它只会添加一个新的提交来解决问题。有关详细信息,请参阅git help revert。这很简单。