版本控制 - 基本 Git 指令


Posted by krebikshaw on 2020-06-12

前言

為什麼寫程式要做版本控制呢?我每天一直寫一直寫,永遠都會是最新版本啊!

  • 理由很簡單:
    1. 有可能哪天突然要回復成以前的版本,一但先前沒有備份就糟了。
    2. 可能我不確定老闆最後要的是什麼樣子,所以我提供不同版本的樣式給老闆選擇。
    3. 其他雜七雜八的理由。
  • 一但有了版本控制,哪天突然需要查閱以前的資料,心裡就會有安心的感覺,還好我有保存起來。

此文章會介紹到的指令

  1. git init : 初始化
    建立檔案
  2. .gitignore : 忽略不需要版本控制的檔案
  3. git add . : 把需要版本控制的檔案加進去( 新增一個暫存資料夾 temp/,把東西丟進去 )
  4. git status:查看目前版本的相關資訊
  5. git log:查看歷史版本的相關資訊
  6. git commit -am "message" : 新建一個版本
    如果步驟 (3.) 已經完成的話,也可以直接用 git commit -m "message"
    可以用 git diff 查看與上一版的差異。
  7. git checkout <hashes> : 可以切換各個版本
  8. git checkout master : 回到最新版本

怎麼做版本控制

從我們熟悉的方式說起:
假設我們要開始找工作,需要寫出自己的履歷表。

  • 我需要分成中文英文的版本
  • 前端後端的職位不相同,履歷也要區分開來
  • 某間公司我特別喜歡,我要獨立出來做一個特別版本

那我應該要怎麼做?

  1. 建立一個叫做 中文版的資料夾,及一個 英文版的資料夾。
  2. 底下分別在建立 前端版本後端版本的資料夾。
  3. 看看我現在做的履歷屬於哪個一個版本,就存放在對應的資料夾底下。
  4. 哪天我需要找 前端英文版履歷,我就可以去 英文版前端版本 資料夾底下找。

現在我們換個情境
上次的履歷做的非常好,現在已經找到了喜歡的工作,為了與同事們合作完成一份專案,我們在網路上建立了雲端資料夾來進行版本控制。結果遇到了一些問題:

  • 藍寶做了一個新的資料夾叫做 新版 2.2,結果痞子妹剛好新增了一個資料夾也叫 新版 2.2。兩個資料夾名稱一樣,結果內容不同。
  • 睏寶正在編輯 project_sleep 這個檔案,正好海盜船長也在自己的電腦修正同一個檔案,睏寶先編輯完後上傳到資料夾,海盜船長比較晚完成,但也把完成的檔案上傳上來,結果睏寶編輯好的檔案就被 覆蓋 掉了。
一但開始多人協作,事情就變得沒這麼簡單

Git 的版本控制

  • 首先要解決版本名稱相同的問題,就必須讓版本名稱亂到幾乎不可能相同。
    • 於是 Git 就將版本名稱轉成 hashes 亂碼,再額外用一個紀錄檔紀錄這個亂碼對應到的是哪一個版本,使得版本名稱不會發生重複。
  • 接下來來解決檔案被 覆蓋 的問題。
    • 每當建立好版本的時候 Git 會去記憶檔案改動的內容,若是新的檔案要去取代掉原先的檔案時,發現兩者內容有衝突,Git 會提醒使用者修正有衝突的部分。

開始使用 Git

init 版本控制初始化

  • 先在電腦建立一個要做為版本控制的資料夾,接著打開神奇的 Terminal 把位置切換到剛剛建立好的資料夾中。輸入指令 git init,資料夾裡面就會出現一個 .git的隱藏資料夾。

status 查看狀態

  • 用於確認現在的版本狀態,哪些檔案有加入版本控制,現在在哪一條 branch
    等等。
  • 使用方式: git status

add 加入版本控制

  • 每新增一個檔案,我們要讓電腦知道,這個檔案要不要做版本控制。
  • 若是沒有加入版本控制,Git 會在訊息中提醒你。
  • 使用方式:
    1. git add <檔案名稱> :將這個檔案加入版本控制
    2. git add .:將這個資料夾下的全部檔案加入版本控制
    3. git rm --cached <檔案名稱> :將檔案解除版本控制

commit 建立版本

  • 幫目前的資料存檔,建立新的版本

    做一次 commit 就好像幫你的資料夾拍一張照片!幫你記下現在每個檔案長什麼樣子,我每做一次 commit 就再拍一張新照片。我可以隨時回來查看曾經拍過的照片。

  • 使用方式:

    • git commit 會跳出 Vim 的介面要求你將版本做命名
    • git commit -m <名稱> 直接建立版本並完成命名
    • git commit -am <名稱> 跳過 add 的步驟。將所有檔案加入版本控制,建立新版本,並完成命名。(三個願望一次滿足)

      -am 無法把新建立的檔案加入版本控制,需要先輸入 git add 再做 commit
      
    • 注意!

      當檔案發生改動,想要提交 commit 之前,Git 會要求你再輸入 git add 檔案名稱。除非直接使用 git commit -am 名稱 這個指令。

log 查看紀錄

  • 查看先前版本的版本號碼、提交者、提交時間。
  • 使用方式: git log

checkout 警察臨檢,把所有東西都拿出來給我檢查!

  • 可用來查看任何版本的內容
  • 在沒有其他 branch 的情況下
    • 輸入 git checkout <版本號碼>:切換到任何 commit 過的版本
    • 輸入 git checkout master:切換回最新版本
  • 若是有新增 branch
    • 輸入 git checkout <branch_name>:切換到任何 branch

.gitignore 忽略不需要版本控制的檔案

  • 前面提到在提交 commit 之前,Git 會要求輸入 git add <檔案名稱> 將修正過的檔案加入版本控制。但是如果我真的有些檔案不想要加入版本控制呢。
  • 可以將這些檔案紀錄在 .gitignore 當中,這樣 git add . 就不會加到不必要的檔案了。

diff 查看版本差異

  • 用來比較新舊版本所做的改動

後記

一開始在學習用 Git 做版本控制,真的複雜到不行。還好 Huli 講解的很淺顯易懂,才讓我即便瞎子摸象,至少還摸得出鼻子在哪。
接下來另外還要寫一篇關於 版本控制 GitHub 的文章,紀錄版本控制如何結合 GitHub 來完成。


#Git #版本控制







Related Posts

自駕車 Sensor Fusion in Visual Perception 簡介

自駕車 Sensor Fusion in Visual Perception 簡介

[ Nuxt.js 2.x 系列文章 ] Nuxt.js 套件應用-Swiper

[ Nuxt.js 2.x 系列文章 ] Nuxt.js 套件應用-Swiper

JavaScript 數據類型 & 內存

JavaScript 數據類型 & 內存


Comments