➣ Reading Time: 5 minutes

前言

我們的程式碼只要再上傳雲端前 (這邊通常指的都會是 github),一切都還好處理,
我們只需要在本地,把 git 的各種事情處理好,
不碰到雲端那塊才來處理錯誤,一切都還好解決

延續 day 1 的精神,新手的我們,盡量把所有的 git 問題在上雲端之前解掉,
這樣可以省下非常多的麻煩與處理。

在各種版本之間移動

git 會透過單向 Hash 的加密演算法,算出每一個 commit 的專屬 SHA-1 值。
這個 Hash 值基本上算是我們在使用 git 中,最萬能的一個值。

萬能的程度,我們可以說,只要有什麼版本控制問題,
先找出你要版本的 Hash 值就對了。

git 裡面的時空概念,時空倒流前的準備

我們先有個概念,git 紀錄的內容就像是時間的變化,
時間連續的變化,就代表不可以「只修改歷史上的某個時間點」,因為會造成「時空錯亂」。

例如說,我今天喝了早餐店奶茶,才導致我肚子痛,
我不可能只倒回「修改喝早餐店奶茶的事實」,「還保留肚子痛的這個結果」

  • 換成圖就是:

過去 -> 早餐店奶茶 -> 肚子痛 -> 現在

  • 我「不能」只修改過去的「某個時間點」:

過去 -> 「不喝」早餐店奶茶 -> 肚子痛 -> 現在

稍微想一下,應該能懂這樣會有什麼「邏輯上的問題」吧,git 也是這個樣子的。

也就是說,我們要時空倒流,勢必也需要放棄一些「後來努力的結果」

直接放棄一切未來的內容,回到過去,並抹去未來的修改 (直接修改檔案的移動)

為了開始我們的時空倒流,我們有幾種方式,
第一種當然最直接的是,放棄一切未來的「好與壞」,回到當下那個時間點
(別想只留下好的XDD,會造成時空錯亂)

  • 用早餐點奶茶的例子,就是

過去 -> 早餐店奶茶 -> 肚子痛 -> 現在
我們回到喝早餐店奶茶的時間,這時我們可以重新決定接下來該怎麼做。

換成指令就是:

git reset --hard <SHA-1>

暫時回到回去,並且開啟新的路線,不抹去這段歷史 (像產生另外一個世界線的感覺,原支線還在)

通常做錯事情很糟糕,但也不至於到想完全「抹去這段歷史」,
那我們可以選擇將人先回到這個過去的時間點,
開一個新的世界線,然後開始新世界線的人生。

這樣的好處在於,我們隨時可以回到另外一個世界線,看看另外一個世界線有沒有什麼「好東西」
但壞處也就是,當碰到「不想被保留的修改」,例如不小心把「密碼上傳」、上傳一些「不應該上傳的檔案」,用這種方式就消不掉,他會永遠在一個「大家都看得到」的世界線上

git checkout <SHA-1> # 只有人回到過去某一個時間點,但這個世界線的歷史是存在的。 
git branch -t <branch name> # 開一個新的 branch,表示建立一個新的世界線。

這邊提供的兩種方式我都會用,最常用的還是第一種,
比較暴力,但通常都是處理一些預料之外的 commit,
另外一種方式,通常是為了先保留一些開發好的東西,
結果哪天突然發現過去某個時間 git 有問題,我就會採用第二種方法。

如果最後不想要這個世界線(branch)了,
我會再使用下面的指令,把不需要的 branch 刪除。

git branch -d <branch name> # 刪除 branch,表示刪除一個世界線。
⭐Git 相關文章整理⭐:
1.【Git】1 – 簡單開始學 git,認識 git 與基本觀念、心態建立,初學者學習 git 碰壁的原因 與 建議學習 git 的方式
2.【Git】git 初學者向 – 最簡單直白的理解 git 基本介紹 與 基本使用 (內有範例程式碼) 總整理 大全
3.【Git】git ignore 設定方法筆記,在 git add 時 固定不要特定檔案 git add remove
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps