公司一個工作了 3 年的新同事,問我怎麼回滾他剛剛修改過的代碼,他說弄了半天不會,之前用的 SVN,沒用過 Git,說 Git 好難弄,我真是醉了。。 回滾代碼是我們程式員經常要操作的,使用 SVN 是很簡單,但使用 Git 也並不難,Git 也有很多好用的客戶端(比如:Sourcetree),簡單 ...
公司一個工作了 3 年的新同事,問我怎麼回滾他剛剛修改過的代碼,他說弄了半天不會,之前用的 SVN,沒用過 Git,說 Git 好難弄,我真是醉了。。
回滾代碼是我們程式員經常要操作的,使用 SVN 是很簡單,但使用 Git 也並不難,Git 也有很多好用的客戶端(比如:Sourcetree),簡單回滾操作都是沒問題的。
如果你喜歡用 Git 命令行,也可以使用 git revert
這種,但它是有回滾痕跡的,會多一個提交記錄,今天棧長就介紹一些沒有痕跡的理想狀態的回退。
本篇對於 Git 的一些基本概念和使用就不介紹了,不會的關註公眾號Java技術棧在後臺回覆 git 進行閱讀。
1、未提交
未提交有以下兩種情況:
1)已經在工作區修改了文件,但還未執行 git add
提交到暫存區。
2)已經執行了 git add
提交到暫存作,但還未執行 git commit
提交本地倉庫。
這時候回退:
git reset --hard
這樣等於清空了暫存區和工作區,本地倉庫回退到了最新的提交狀態。
2、已提交未推送
這種情況是指已經執行了 git add
提交到暫存區操作,又執行了 git commit
提交本地倉庫,但還未 git push
推送到遠程倉庫。
2.1 上個版本回退:
git reset --hard HEAD^
2.2 多個版本回退:
git reset --hard HEAD~N
N:代表數字,要回退的次數。
2.3 指定版本回退:
git reset --hard <commit_id>
2.4 直接回退到遠程最新版本:
git reset --hard origin/master
3、已推送
這種情況是指已經執行了 git add
提交到暫存區操作,又執行了 git commit
提交本地倉庫,還執行 git push
推送到遠程倉庫。
參考上面的 2.1~2.4 的方法,先強制回退到本地倉庫到上 N 個版本,再進行強制推送到遠程倉庫。
回退到上個版本示例:
git reset --hard HEAD^
git push -f
總結
第一種情況一般在工具上很容易操作,比如在 Sourcetree:
但 2、3 種情況在工具上面就沒法辦法操作了,至少在 Sourcetree 上是不行,需要在命令行進行回退,如果大家有知道的也可以分享下。
以上總結了一些棧長平時常用的 Git 回退方法,當然還有一些其他回退方式,以上也已經夠用了,希望對大家有幫助。
後面我還會分享一些我平時用到的修改歷史記錄的實戰乾貨,比如怎麼修改歷史提交信息、合併多次提交等,關註公眾號Java技術棧第一時間推送。
如果有學到,三連支持下哦~
好了,今天的分享就到這裡了,後面棧長會分享更多好玩的 Java 技術和最新的技術資訊,關註公眾號Java技術棧第一時間推送,我也將主流 Git 面試題和參考答案都整理好了,在公眾號後臺回覆關鍵字 "面試" 進行刷題。
版權聲明: 本文系公眾號 "Java技術棧" 原創,轉載、引用本文內容請註明出處,抄襲、洗稿一律投訴侵權,後果自負,並保留追究其法律責任的權利。
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2022最新版)
4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!
覺得不錯,別忘了隨手點贊+轉發哦!