? ? 關注、星標公眾號,直達精彩內容
轉自:民工哥技術之路
前兩天,一讀者帶回來的一個經典的面試題,今天,給大家分享一下,如果有跳槽找工作意向的朋友可以積累一下。
面試官問:Git 如何撤回已 Push 的代碼?如果問你,你會嗎?
有兩種解決方法,如下:
在日常的開發中,我們經常使用Git來進行版本控制。有時候,我們可能會不小心將錯誤的代碼 Push 到遠程倉庫,或者想要在本地回退到之前的某個版本重新開發。
或者像我一樣,寫了一些感覺以后很有用的優化方案push到線上,又接到了一個新的需求。但是呢,項目比較重要,沒有經過測試的方案不能輕易上線,為了承接需求只能先把push上去的優化方案先下掉。
現在我的分支是這樣的,我想要在本地和遠程倉庫中都恢復到help文檔提交 的部分。
如果你的錯誤代碼不是很多,那么你其實可以通過與你想要恢復到的commit進行對比,然后手動刪除錯誤代碼,然后刪除不同的代碼。
按住 ctrl 選擇想要對比的兩個commit,然后選擇Compare Versions就能通過對比刪除掉你想要刪除的代碼。
這個方案在代碼很簡單時時非常有效的,甚至還能通過刪除后最新commit和想要退回的commit在Compare 一下保障代碼一致。
但是這個方法對于代碼比較復雜的情況來說就不太好處理了,如果涉及到繁雜的配置文件,那更是讓人頭疼。
而且,這樣還會保留錯誤提交的記錄,對于有強迫癥的我來說,有點接受不能。對此,git也有一套較為優雅的操作流程,同樣能解決這個問題。
這個時候會跳出四個選項供你選擇,我這里是選擇hard。
其他選項的含義僅供參考 ,因為我也沒有一一嘗試過。
Soft :#你之前寫的不會改變,你之前暫存過的文件還在暫存。
Mixed :#你之前寫的不會改變,你之前暫存過的文件不會暫存。
Hard :#文件恢復到所選提交狀態,任何更改都會丟失。你已經提交了,然后你又在本地更改了,如果你選hard,那么提交的內容和你提交后又本地修改未提交的內容都會丟失。
keep :#任何本地更改都將丟失,文件將恢復到所選提交的狀態,但本地更改將保持不變。你已經提交了,然后你又在本地更改了,如果你選keep,那么提交的內容會丟失,你提交后又本地修改未提交的內容不會丟失。


然后,之前錯誤提交的commit就在本地給干掉了。但是遠程倉庫中的提交還是原來的樣子,你要把目前狀態同步到遠程倉庫。也就是需要把那幾個commit刪除的操作push過去。
打開push界面,雖然沒有commit需要提交,需要點擊Force Push,強推過去。
需要注意的是對于一些被保護的分支,這個操作是不能進行的。需要自行查看配置,我這里因為不是master分支,所以沒有保護。
可以看到,遠程倉庫中最新的commit只有我們的help文檔 。在其上的三個提交都沒了。
注意: 以上使用的是2023版IDEA,如果有出入的話可以考慮搜索使用git命令。
???????????????? ?END ????????????????
關注我的微信公眾號,回復“加群”按規則加入技術交流群。
點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。