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

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

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

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

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

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

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



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

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



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

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

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

以上就是Git撤回已Push的代碼的方法大全的詳細內(nèi)容,更多關(guān)于Git撤回已Push代碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vs2022使用git同步報錯以及解決每次推送要輸入密碼問題
本文主要介紹了vs2022使用git同步報錯以及解決每次推送要輸入密碼問題,文中通過圖文示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-10-10
在VSCode中如何配置Python開發(fā)環(huán)境
VScode是一個相當優(yōu)秀的IDE,具備開源、跨平臺、模塊化、插件豐富、啟動時間快、顏值高、可高度定制等等優(yōu)秀的特質(zhì),所以用VScode來編寫Python,也是相當?shù)暮糜玫?。所以,今天我們就來講講,怎么在VScode上配置Python開發(fā)環(huán)境。2020-01-01
WinSCP和PuTTY(與Linux系統(tǒng)鏈接的工具)的安裝和使用圖文教程
Putty是用來遠程連接服務(wù)器的,支持SSH、Telnet、Serial等協(xié)議的連接,WinSCP是一個Windows環(huán)境下使用SSH的開源圖形化SFTP客戶端,它的主要功能就是在本地與遠程計算機間安全的復(fù)制文件,本文重點給大家介紹WinSCP和PuTTY安裝使用,感興趣的朋友一起看看吧2022-06-06
windows 中 \r\n 區(qū)別于 類unix中的\n 疑問理解(crlf回車換行)
windows 中 \r\n 區(qū)別于 類unix中的\n 疑問 迎刃而解,需要的朋友可以參考下。2011-08-08

