Git撤回已Push的代碼的方法大全
面試官問:Git 如何撤回已 Push 的代碼?如果問你,你會嗎?
在日常的開發(fā)中,我們經常使用Git來進行版本控制。有時候,我們可能會不小心將錯誤的代碼 Push 到遠程倉庫,或者想要在本地回退到之前的某個版本重新開發(fā)。
或者像我一樣,寫了一些感覺以后很有用的優(yōu)化方案push到線上,又接到了一個新的需求。但是呢,項目比較重要,沒有經過測試的方案不能輕易上線,為了承接需求只能先把push上去的優(yōu)化方案先下掉。
現(xiàn)在我的分支是這樣的,我想要在本地和遠程倉庫中都恢復到help文檔提交 的部分。

1. 基礎的手動操作(比較笨,不推薦)
這樣的操作非常不推薦,但是如果你不了解git,確實是我們最容易理解的方式。
如果你的錯誤代碼不是很多,那么你其實可以通過與你想要恢復到的commit進行對比,然后手動刪除錯誤代碼,然后刪除不同的代碼。

按住 ctrl 選擇想要對比的兩個commit,然后選擇 Compare Versions 就能通過對比刪除掉你想要刪除的代碼。
這個方案在代碼很簡單時時非常有效的,甚至還能通過刪除后最新commit和想要退回的commit在Compare 一下保障代碼一致。
但是這個方法對于代碼比較復雜的情況來說就不太好處理了,如果涉及到繁雜的配置文件,那更是讓人頭疼。只能通過反復的Compare Version來進行對比。
這樣的手動操作顯然顯得有些笨拙了,對此git有一套較為優(yōu)雅的操作流程,同樣能解決這個問題。
2. git Revert Commit(推薦)

同樣的,我第三次提交了錯誤代碼,并且已經push到遠程分支。想要撤回這部分代碼,只需要右鍵點擊錯誤提交記錄

git自動產生一個Revert記錄,然后我們會看到git自動將我第三次錯誤提交代碼回退了,這個其實就相當于git幫我們手動回退了代碼。

后續(xù),只需要我們將本次改動push到遠程,即可完成一次這次回退操作,

revert相當于自動幫我們進行版本回退操作,并且留下改動記錄,非常安全。這也是評論區(qū)各位大佬非常推薦的。
但是revert還是存在一點不足,即一次僅能回退一次push。如果我們有幾十次甚至上百次的記錄,一次次的單擊回退不僅費時費力而且還留下了每次的回退記錄,我個人覺得revert在這種情況下又不太優(yōu)雅。
3. 增加新分支(推薦撤回較多情況下使用)
如果真的需要回退到上百次提交之前的版本,我的建議是直接新建個分支。
在想要回到的版本處的提交記錄右鍵,點擊new branch



新建分支的操作僅僅增加了一個分支,既能保留原來的版本,又能安全回退到想要回退的版本,同時不會產生太多的回退記錄。
但是此操作仍然建議慎用,因為這個操作執(zhí)行多了,分支管理就又成了一大難題。
4. Reset Current Branch 到你想要恢復的commit記錄(不太安全,慎用)

這個時候會跳出四個選項供你選擇,我這里是選擇hard 。
其他選項的含義僅供參考 ,因為我也沒有一一嘗試過。
- Soft :你之前寫的不會改變,你之前暫存過的文件還在暫存。
- Mixed :你之前寫的不會改變,你之前暫存過的文件不會暫存。
- Hard :文件恢復到所選提交狀態(tài),任何更改都會丟失。你已經提交了,然后你又在本地更改了,如果你選hard,那么提交的內容和你提交后又本地修改未提交的內容都會丟失。
- keep :任何本地更改都將丟失,文件將恢復到所選提交的狀態(tài),但本地更改將保持不變。你已經提交了,然后你又在本地更改了,如果你選keep,那么提交的內容會丟失,你提交后又本地修改未提交的內容不會丟失。



然后,之前錯誤提交的commit就在本地給干掉了。但是遠程倉庫中的提交還是原來的樣子,你要把目前狀態(tài)同步到遠程倉庫。也就是需要把那幾個commit刪除的操作push過去。
打開push界面,雖然沒有commit需要提交,需要點擊Force Push ,強推過去。

需要注意的是對于一些被保護的分支,這個操作是不能進行的。需要自行查看配置,我這里因為不是master分支,所以沒有保護。

可以看到,遠程倉庫中最新的commit只有我們的help文檔 。在其上的三個提交都沒了。

以上就是Git撤回已Push的代碼的方法大全的詳細內容,更多關于Git撤回已Push代碼的資料請關注腳本之家其它相關文章!
相關文章
git遠程操作異常:correct access rights問題及解決
這篇文章主要介紹了git遠程操作異常:correct access rights問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03

