(內容未完待續)
什麼是版本控制?
版本控制:把製作過程中的每個版本都保存下來。
版本控制主要分為 個人 或 團隊 的版本控制。
一個人的版本控制
這可能是每個人從學生時期就學會的技能。
你可能會說:我真的沒學過耶!
來來來,我們先看張圖:
不管是什麼樣的檔案格式,是不是覺得似曾相識?
以前在交期末報告時,應該都曾有前前後後存了好幾個版本的經驗,其實這也算是版本控制的一種喔,但這樣進行版控的缺點是沒辦法清楚看見每個版本的差異性,時間久了也難以進行管理。
團隊的版本控制
(待補圖)
什麼是 Git?
Git 是一套能管理檔案版本,並達到做版本控制的程式,除了可以作為個人使用,也能用在多人協作上。
Git 紀錄的不是整份檔案,而是「檔案的異動」
Git 的優點:
- 免費
- 開源
- 速度快
- 檔案體積小
- 分散式系統
開始時光機旅程
首先,先建立一個需要版本控制的目錄,開始這次的使用 Git 練習。
資料庫初始化
git init
:初始化目錄,讓 Git 對這個目錄開始進行版本控制。
使用完這個指令後,主目錄裡面將會出現一個隱藏的 .git
目錄,裡面的內容是整個 Git 的精華,也是用這些內容來進行版本控制的。
如果這個目錄不想再使用 Git 控制呢?
只要把 .git
目錄刪除即可。
※ 注意:整個專案目錄內,任何檔案刪除都有辦法回朔,但誤把
.git
刪除就真的沒辦法了。
查詢狀態
git status
:查詢當前目錄的狀態。
常使用的指令,建議有事沒事就可以使用這個指令確認狀態。
把檔案交給 Git
git add
:決定檔案是否進行版本控制。
假設目前有這些檔案:
code.js
note.txt
style.css
先把以上檔案移至目錄內,並輸入 git status
查詢狀態,即可得到這些檔案目前未被版本控制的訊息。
接下來輸入 git add code.js
,讓 code.js
加入版本控制並查看狀態,會發現檔案被分成兩個區域:
- staged:(有版本控制)
- untracked(沒有版本控制)
不小心忘記的話,CLI 畫面上很貼心的提示了如何加入或取消版本的指令:
取消版本控制:git rm --cached <檔案>
(補圖:git rm--cached)
如果不想要一個一個檔案慢慢輸入的話,可以輸入 git add .
,即可一口氣把目前所在目錄中的所有檔案都加入版本控制。
新建一個版本
git commit
:新建一個版本
當專案都完成了以後,就可以輸入 git commit
開始建立第一個版本,輸入完會進入 Vim 編輯器,可以把比較長的 commit message 在 Vim 裡面輸入,如果不想進去 Vim 裡面,也可以直接輸入 it commit -m "想要輸入的 commit message"
。
完成後再輸入一次git status
確認狀態,即會發現不同之處。
(待補圖:git_commit_01和git_commit_01的Before&After圖)
只要有編輯過檔案,都要先輸入
git add
,再打git commit
指令完成版本控制。(重要)
只要有更新都要照下面的步驟完成:
git add <file>
或git add .
git commit
+ 進入 Vim 裡面輸入 commit message
或輸入以下指令亦可
git commit -m "想要輸入的 commit message"
(不進入 Vim)組合指令:
git commit -am '想要輸入的 commit message'
查看歷史紀錄
git log
:查看檔案詳細資訊。
輸入後會進入詳細資訊的畫面查看,內容包含:包含版本號碼、作者、提交時間、commit message,離開的話可以按 :q
離開
git log --oneline
:查看檔案重要資料。
這個指令和 git log
的差別是只會顯示 7 碼版本號碼、commit message。
進入時光機
如果玩過單機遊戲的應該都聽過 SL大法(Save、Load),git checkout
這個指令就是 Git 版的 Load 法(讀取紀錄),能夠輕鬆切換版本的重要指令。
git checkout + 版本號碼
:切換至指定版本git checkout master
:切換到最新版本
Git 中的邊緣人
.gitignore
:任何放在裡面的檔案都不會加到版本控制
使用方式:
- 先建立
.gitignore
檔案 - 用
vim
打開.gitignore
編輯 - 在裡面輸入不加入版本控制的檔名
- 存檔後使用
git status
檢查
此指令大多用來放置不重要的檔案,例如:作業系統相關檔案、使用者個人設定、電腦暫存檔等
比對兩個版本之間的差異
git diff
:用來查看版本間的差異。
完整 Git 流程懶人包
git init
- 建立
.gitignore
,把不需加入版本控制的檔案先放入 git add .
先把所有檔案加入版本控制git commit -am 'commit message'
---以上即完成專案第一個版本---
如果有新增檔案:
要先輸入 git add <file>
,才打 git commit -am 'commit message'
如果只改現有檔案:
直接打 git commit -am 'commit message'
就好
Git 狀況劇
commit 了,但是想再修改 commit message
輸入 git commit --amend
,會開啟 Vim 編輯模式,即可修改 commit message
commit 後,反悔不想 commit 了
git reset HEAD^
:回到上一個 commit,還原檔案狀態
可以在後面加上模式:
--soft
(完整指令:git reset HEAD^ --soft
)
這個指令的好處是,會保留檔案修改過的時候,但又能恢復到 commit 前(最常使用的做法)--hard
(完整指令:git reset HEAD^ --hard
),代表強制回去上一個 commit,把剛剛反悔的 commit 當作沒發生過,修改的檔案也會恢復未修改的狀態(最極端的做法)
欲了解預設模式請參考:Git reset 的三種模式( soft mixed hard )比較
還沒 commit,但修改的東西不想要了
git checkout -- <file>
:還原檔案內容
修改 branch 的名字
git branch -m <新名稱>
把遠端的 branch 抓下來
git checkout <想抓下來的 branch 名稱>
客製化各個階段:Git hook
什麼是 Hook?
發生某件事的時候通知我(例如:有人 push 時、有人 commit 時)
指令懶人包
指令 | 說明 | 用法 |
---|---|---|
init | 初始化目錄 | git init |
status | 查詢當前目錄的狀態 | git status |
init | 決定檔案是否進行版本控制 | git add |
add | 初始化目錄 | git init |
(未完待續)
參考:
(以上內容是我在 程式導師實驗計畫第四期 的學習紀錄,如有理解錯誤,歡迎糾正,謝謝:D)
資料來源:Lidemy