[Week 1] 認識版本控制與初級 Git 時光機


Posted by Mily on 2020-06-26

(內容未完待續)

什麼是版本控制?

版本控制:把製作過程中的每個版本都保存下來。
版本控制主要分為 個人團隊 的版本控制。

一個人的版本控制

這可能是每個人從學生時期就學會的技能。
你可能會說:我真的沒學過耶!
來來來,我們先看張圖:

不管是什麼樣的檔案格式,是不是覺得似曾相識?
以前在交期末報告時,應該都曾有前前後後存了好幾個版本的經驗,其實這也算是版本控制的一種喔,但這樣進行版控的缺點是沒辦法清楚看見每個版本的差異性,時間久了也難以進行管理。

團隊的版本控制

(待補圖)

什麼是 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 指令完成版本控制。(重要)

只要有更新都要照下面的步驟完成:

  1. git add <file>git add .
  2. 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:任何放在裡面的檔案都不會加到版本控制

使用方式:

  1. 先建立 .gitignore 檔案
  2. vim 打開 .gitignore 編輯
  3. 在裡面輸入不加入版本控制的檔名
  4. 存檔後使用 git status 檢查

此指令大多用來放置不重要的檔案,例如:作業系統相關檔案、使用者個人設定、電腦暫存檔等

比對兩個版本之間的差異

git diff:用來查看版本間的差異。

完整 Git 流程懶人包

  1. git init
  2. 建立 .gitignore,把不需加入版本控制的檔案先放入
  3. git add .先把所有檔案加入版本控制
  4. 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,還原檔案狀態

可以在後面加上模式:

  1. --soft(完整指令:git reset HEAD^ --soft
    這個指令的好處是,會保留檔案修改過的時候,但又能恢復到 commit 前(最常使用的做法)

  2. --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


#Git







Related Posts

計畫列表

計畫列表

 [10] 型別 - 內建型別、基本型別值

[10] 型別 - 內建型別、基本型別值

用 Python 自學資料科學與機器學習入門實戰:Scikit Learn 基礎入門

用 Python 自學資料科學與機器學習入門實戰:Scikit Learn 基礎入門


Comments