今天的主題是 Git,這是個版本控管的工具。
版本控管這四個字包含了許多的意義在裡面,你可以紀錄(commit)現在的進度,也可以回到過去紀錄的進度(revert),你也可以從目前的主線中切出另一個分支(branch)進行開發,等開發完成後再主線合併(merge)同步進度。
在使用 Git 之前,先確定電腦上已經有安裝了 Git,可以透過 git --version
來檢視。
如果沒有安裝的話,可以照著官方網站的教學進行安裝:Git 安裝教學
當我們要在一個新的專案中使用 Git 的時候,會透過 git init
來進行初始化。
會建立 .git
這個資料夾來儲存往後 git 操作的紀錄。
輸入 ls -al
可以看到 .git
這個資料夾已經被我們建立了,如此便已完成我們的初始化動作。
可以使用這個指令來看到目前的狀態,裡面的資訊會有目前所在的分支、已經 add 的檔案、檔案的狀態(新增、編輯、移除...)等等。
目前 index.html 所在的地方是:Unstaged
,也就是尚未 add
到 staging area
的變更。
git-fork的畫面
輸入 git add index.html
或是全部都加 git add .
or git add --all
,完成後我們可以輸入 git status
看一下目前的狀態:
同時也可以看到 git-fork 的畫面,index.html 已經被移到下面那層 staged
中了。
為這項變更加入說明,並將變更從 staging area
移至 repository
。
輸入 git commit -m "feat: 新增了 index.html"
這時候我們可以打開 git-fork 的畫面來看:
可以看到我們剛剛透過 add 加入的檔案與在 commit 時輸入的訊息都已經出現在 repository 的畫面上了。
如果覺得剛剛做的 commit 不妥,想要退回去的話,可以使用這個指令
git reset 的指令有三種參數:
unstaged
(尚未進行 git add)的地方staged
(已經進行 git add)的地方我們可以透過 git reset --mixed HEAD
回復到最新一個 commit 的地方。
而改為 HEAD~1
的話則表示回到上一個 commit 的地方。HEAD~2
的話則表示回到上兩個 commit 的地方。
除了透過 HEAD 之外,也可以直接輸入目標的 commit 編號進行 reset。
這個方式比較適合要取消、重做已經 commit 出去(進行 push 了)的變更的情境。
使用 git revert 的話會產生一個新的 commit,這個 commit 裏有著進行回復的紀錄,他會是做一個新的 commit 來進行回復的行為,而不是像 reset 一樣直接退回去某個 commit 造成紀錄的改變。
透過分支,我們可以在多人協作、或是多個功能、頁面開發的時候,讓各開發項目的 commit 都在對應的 branch 上,如果全部都 commit 在同一個 branch 的話容易造成開發流程的混亂,不同功能的 commit 也都會擠在同一條 branch 上。
除此之外,透過 branch 的切換,我們可以留有不同開發階段的分支。
舉例來說,今天我們的 main 分支是當前正式環境的進度,而我們要新增一個頁面的話,會在 main 分出來的 dev 分支上進行開發(或是從 dev 分支再分一個給該頁面的 branch 出來)等開發完成後 commit 到 dev 分支進行確認。
此時的 dev 分支狀態就跟 main 加上這個新頁面的狀態是一樣的,確認沒問題之後,會將 dev 的分支與 main 的進度同步,如此一來,main 的分支上也會有剛剛開發的那一個頁面了。
輸入 git branch dev
來建立新的分支
輸入 git checkout dev
來切換至 dev 這個分支
也可以用 git checkout -b dev
來建立分支並且切換過去
將 B 分支的進度,同步到 A 分支中
先切到 A 分支:git checkout A
把 B 分支的進度與當前分支(A)merge:git merge B