git reflog 你不知道的事

A:「一個前端小白,她對git不熟悉,辛辛苦苦加班一星期敲的代碼沒了。」
B:"噢?怎麼沒了"
A:"在終端輸入git log,列出全部的commit信息,以下圖:"
clipboard.png
A:「commit的信息很簡單,就是作了6個功能,每一個功能對應一個commit的提交,分別是feature-1 到 feature-6」
B:"好的 而後呢"
A:「而後前端小白坑爹了,執行了強制回滾,以下:」前端

git reset --hard 2216d4e

A:「小白回滾到了feature-1上,而且回滾的時候加了–hard,致使以前feature-2 到 feature-6的全部代碼所有弄丟了,如今git log的顯示以下:」git

clipboard.png
A:「如今feature-2 到 feature-6的代碼沒了」
A:「小白還在這個基礎上新添加了一個commit提交,信息叫feature-7,以下圖:」微信

clipboard.png
A:「如今feature-2 到 feature-6全沒了,還多了一個feature-7」
A:「那麼B同窗 請問 如何把丟失的代碼feature-2 到 feature-6所有恢復回來,而且feature-7的代碼也要保留」
A:「B同窗,開始你的表演」
B:「啊哈哈哈!這題我會」spa

解答
這個問題是一個很經典很經典的git問題,其實用git reflog和git cherry-pick就能解決。
基本上掌握了git reflog和git cherry-pick,你的git命令行操做就算是成功入門了。
接下來一一講解如何操做
你只須要在終端裏輸入:命令行

git reflog

而後就會展現出全部你以前git操做,你之前全部的操做都被git記錄了下來,以下圖:3d

clipboard.png
這時候要記好兩個值:4c97ff3和cd52afc,他們分別是feature-7和feature-6的hash碼。而後執行回滾,回到feature-6上:code

git reset --hard cd52afc

如今咱們回到了feature-6上,以下圖:blog

clipboard.png
好的,咱們回到了feature-6上,可是feature-7沒了,如何加上來呢?這個時候就用上了git cherry-pick,剛剛咱們知道了feature-7的hash碼爲4c97ff3,操做以下:ip

git cherry-pick 4c97ff3

輸入好了之後,你的feature-7的代碼就回來了。期間可能會有一些衝突,按照提示解決就好。最後的結果以下圖:get

clipboard.png
是否是很簡單,feature-1 到 feature-7的代碼就合併到了一塊兒,之前的代碼也都回來了。

文章整合於微信開放社區看到的一篇有趣的文章 https://developers.weixin.qq....

相關文章
相關標籤/搜索