本文複製文字:https://blog.csdn.net/qq_28018283/article/details/77877986
防止以後文章流失
在合作的過程中,難免會遇到需要回滾的時候,分為本地和遠端回滾。
某天,程式設計師 小a 喝了很多很多很多的酒,然後開始寫** 。
a開始改**中乙個檔案,改了半個小時,執行之後,發現已經不知道自己在寫什麼,想把這個檔案恢復到該之前的樣子
git checkout ***.file //恢復單個檔案
a恢復了之後,思路變的清晰了不少,下筆如神,重新改好,commit
了工作區的變動,這時a發現:我的天,我都改了什麼?這**可太 low 了。我可不能提交我醜陋的**!
,他做了撤銷
git reset --soft head^ //撤銷 快取區
然後又接著修改了**,終於再三思量,提交了三次 commit 。
a 提交了三次**,已經是凌晨2點,a去線上pull
之後跑了一遍專案,瞬間頭腦清醒,發現由於環境不一致,導致了 bug ,思考之後,發現暫時無法解決,只好回滾,小a首先將自己本地**倉庫回滾到,上一次
的版本,可以通過reset
來回滾。
首先需要知道之前提交的版本號,小a通過git log
檢視提交版本
commit 25de78c066faccf5732dc86c62ebd9e85a7d6015author: ***
date: wed sep 6 15:39:58 2017 +0800最新一次提交
commit 85c16a9c048a035c4796f373b8816c0b2f017d18
author: ***
date: wed sep 6 13:33:56 2017 +0800上一次提交
commit 9425c47b6cb54cdb06127749488bc48243832ad7
author: ***
date: wed sep 6 13:33:56 2017 +0800倒數第三次提交
...
git reset --hard head^ //撤銷工作區到上乙個版本
小a又覺得或許應該將**回滾到上兩次
的版本
git reset --hard 9425c47b6 //版本號可以省略寫
或git reset --hard head~2
小a 一看,居然將本地版本回滾到了倒數三次的版本,他生氣給了自己一巴掌。然後
git reset --hard 85c16a9c
終於將版本恢復到了倒數第二次提交,可氣的是,小a太過激動,把水杯打翻了,電腦cila
就關機了,小a 顫抖著雙手,終於把電腦重新開啟,他只想知道自己剛剛reset 了沒有,於是小a
git reflog25de78c head@: reset: moving to 85c16a9c
看到了,最近的操作記錄,已經會滾到了倒數第二次提交,這時候,a將他本地的**, 回滾到了他想到的版本,但是遠端倉庫還是停留在最新版本,他 嘆了口氣,-f
推上去,這樣遠端的版本就被撤銷了。
git push -f
注:有些 git server 不允許這樣做,比如gitlab ,但是可以通過管理員開啟。
這樣,a 就將本地和遠端master 都恢復到了上兩次提交的版本。小a迷迷糊糊的把 qq 簽名改成 「喝酒不寫碼,寫碼不喝酒」 ,然後便一頭栽進枕頭,呼呼入睡。
撤銷 Git reset操作
本文 找回git中丟失的commit 在使用git的過程中,有時候會因為一些誤操作,比如reset rebase merge等。特別是在commit之後又執行了git reset hard head強制回滾本地記錄以及檔案到伺服器版本,導致本地做的修改全部恢復到git當前分支的伺服器版本,同時自己的...
Git 撤銷本地修改
一 未使用 git add 快取 時。可以使用 git checkout filepathname 比如 git checkout readme.md 不要忘記中間的 不寫就成了檢出分支了!放棄所有的檔案修改可以使用 git checkout 命令。此命令用來放棄掉所有還沒有加入到快取區 就是 gi...
git 撤銷,放棄本地修改
一 未使用 git add 快取 時 可以使用 git checkout filepathname 比如 git checkout readme.md 不要忘記中間的 不寫就成了檢出分支了!放棄所有的檔案修改可以使用 git checkout 命令。此命令用來放棄掉所有還沒有加入到快取區 就是 gi...