以往專案開發時,從設計階段、實作階段到驗證階段基本上都是一條龍式的開發
作為後端服務供應,有兩個不同的團隊在進行服務串接
其中一個團隊開發速度相對較快,另一個相對慢了許多
在跟速度較快的團隊聯調的過程,修改了相關安全性與例外處理的bug
另一個團隊因為初次接觸相關技術,初期得花時間協助他上手

最近遇到一個有意思的情境,版本發布已經到下一版了
速度較慢的這個團隊,在測試階段傳來訊息,因為他手邊的測試還沒有告一個段,希望可以將發布的版本往前roll
雖然相關的專案執行與發佈都有進行版本控管,要切換版本不是太困難的事情
不過以往滾動式的程序,還真的沒有實際走過這一遭
所以藉這份紀錄提醒自己,也算親自實做這個完整的程序

因為基於專案執行的保密條款,所以我們透過一個模擬的案例來說明:
我們先在環境當中加入一個文字檔,檔案的內容就是標準的”Hello world!”

Hello world example in test.txt file as initial commit

接著我們針對這個檔案進行相關修訂
同一份檔案加入一些新的文字內容

add new word into the test.txt file and commit it

現在模擬情境來了
因為已經進行新的修訂提繳,理論上檔案內容已經發生變動
臨時的聯調需求,需要將版本往回roll,但不希望影響既有的版本控管紀錄,我應該可以怎麼做呢?
Git提供不同的指令讓你做到這件事情,包含: git revert, git reset等
但上述都會影響你的版本紀錄,GIt Graph會發生變化
其實你有一個更好的選擇- Git Checkout

在Visual Studio Code 有 Git Graph可以讓你看每一個提交的版本
我們這次潮一點,透過CLI的方式來調用吧!

eidolon@DESKTOP MINGW64 ~/Desktop/git test ((2650c76...))
$ git log
commit 2650c76abb44efbb7469173ec77b8f3f2db1fb60 (HEAD)
Author: eidolon<xxx@eidolon168.com>
Date:   Thu Jul 29 11:09:48 2021 +0800

    add words

commit b9860b6441416f2e31fba2d5468cd0739d74fac9       
Author: eidolon<xxx@eidolon168.com>
Date:   Thu Jul 29 11:08:44 2021 +0800

    init commit

上面的終端機顯示: 一共有兩個版本,我們再透過 git checkout進行切換,回到init commit階段吧

eidolon@DESKTOP MINGW64 ~/Desktop/git test ((2650c76...))
$ git checkout b9860b6441416f2e31fba2d5468cd0739d74fac9
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  2650c76 add words

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 2650c76

HEAD is now at b9860b6 init commit

這樣就搞定!
可以看到指標(HEAD)只到前一版了

測試結束要回到最後的版本也相當容易
我們再透過 git checkout 切換回來

eidolon@DESKTOP MINGW64 ~/Desktop/git test ((b9860b6...))
$ git checkout 2650c76
Previous HEAD position was b9860b6 init commit
HEAD is now at 2650c76 add words

終端機的訊息也會清楚的告訴你
Git 已經重新指向指定的分支了

從 Git Graph 的樹狀結構中
也可以清楚看到只有2個提交紀錄,並不會影響既有的提交