今天是小明來公司實習的第一天,大家都知道新人嗎?肯定希望自己多幹點活,這樣才能在公司裡混的下去,所以一上班,小明就鬥志滿滿的開啟VsCode新建了一個資料夾 。
小明首先通過git init
這個命令 來初始化;接著小明新建了五個資料夾;
小明看到自己建好的檔案,他非常高興,他首先把自己建好的五個檔案通過git add
和git commit -m ""
來把檔案一個一個新增好
小明是一個一個的新增上去的,在這裡還有一個命令可以一次性新增所有那就是git add . (這個點就是代表選中所有進行提交)
接著小明在終端命令視窗輸入了
git log --oneline
來檢視他的提交記錄
小明檢視完之後,他就開始洋洋灑灑的開始寫程式碼了,大家都知道寫程式碼肯定會有bug,此時的小明當他寫了幾天,他發現自己的程式碼有很多bug,於是他就想著趁自己的領導沒有發現之前趕緊把自己的程式碼給刪了。
於是小明做了一件事那就是讓程式碼回滾
git reset --hard d970340
(因為在小明實在feature2開始接手公司的專案,所以他就讓程式碼回滾到feature2)。注意:如果你想回到那個檔案,你就直接指向這個檔案的前面的地址編號。小明看到一切都回到最開始的位置,他心裡說了一句:好險,幸好git可以讓我重頭再來,於是他又重新建立一個檔案feature6,重複了之前的新增,檢視的操作
小明正要重新動手大幹一番的時候,他發現自己把大佬在檔案裡面寫的東西也刪了,大家都知道一般通過命令刪除的東西很難找回,但是git就不同,它可以,於是小明在終端命令視窗輸入
git reflog
檢視所有的分支記錄,包括刪除的(下面就是在終端命令視窗輸入這個命令顯示出來的結果)
接著小明在命令視窗輸入
git reset --hard 2c85128
一下就恢復到重置之前的操作,大家可以看到feature3,4,5都恢復回來,這就是git的起死回生的,但是它不僅僅可以起死回生,他可以服從你的命令。
小明把刪除的檔案找回來了,他還不滿意,因為他發現之前刪除的是被恢復了,但是後面新建額feature6卻不見了,他想要之前的檔案在,後面新建的feature6也在。於是小明在命令視窗輸入
git cherry-pick
可以理解為我們想要提交的那部分,使用 git cherry-pick
可以讓你想要提交的那部分合併到當前分支上
git cherry-pick 77c5d11
(後面的數字就是前面建立的feature6的SHA)
如果採用git cherry-pick 77c5d11
這個沒有成功,那就說明有衝突,當遇見這樣的情況,我們就可以通過git commit
來手動提交上去或者git add.後直接使用git cherry-pick --continue
繼續。
注意:
當出現衝突的時候我們可以採用下面這兩種方法解決:
1.執行
git cherry-pick --abort
取消上次操作。2.執行
git commit --allow-empty
,表示允許空提交。
就這樣小明把所有的檔案都找回來了,這就是小明第一天在公司實習的故事。
如果我們在公司遇到和小明這樣類似的情況,不要慌張,可以採用類似的方法解決,千萬不要隨便讓程式碼回滾。