2013-10-07 105 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。這很簡單。