Day 3 - 了解 Git 及 GitHub


| 547

前言

這篇文記錄學習 Git 及 GitHub 的使用方法,兩者區別:

  • Git:用來進行檔案版本控制
  • GitHub:讓使用者放檔案的平台,網站上也具有版本控制功能

使用者可以在 terminal 用 Git 指令將檔案上傳到 GitHub。


什麼是 Git?怎麼用它?

Git 係用以做檔案版本控制

基本的版本控制特點:

  • 以資料夾歸納版本資料:當要做一個新版本的檔案時,會建立一個新的資料夾來放置所有相關的資料(文件、子檔案... etc)。
  • 不做版本控制的資料額外放置:另外有些不想加入版本控制的資料,則不放入資料夾,避免不小心變更內容。
  • 以亂數命名避免版本號衝突:當有多人協作一個新版本的各個子功能時,若以版本流水號(如 v2, v3)作為資料夾名稱容易產生混淆,所以用類似亂數的代號來當命名資料夾。
  • 另以檔案記錄最新版本:資料夾或檔案數量可能又多又雜,而且名稱也難以找到連結,不知道哪個文件是配哪個檔案,這時可用一個檔案記錄最新版本,只要看這檔案就可以知道檔案其中的關係。

而使用 Git 可以幫助我們做到上列的事情。


Git 指令

git init

用途:初始化,新建 Repository
指令:git init

輸入指令後會出現以下訊息(例),並在目前的資料夾建立一個 .git 資料夾,任何版本控制項目都會透過它進行監視版控。

Initialized empty Git repository in /Users/id/Desktop/test/.git/

git status

用途:顯示目前 working directory 所有檔案的狀況(例如檔案被變更)
指令:git status


git add

用途:對檔案進行版本控制(將檔案加入 staging area)
指令:

  • git add <file> 將單個檔案進行版本控制
  • git add . 將所有檔案進行版本控制

注意:檔案沒有被git add的話,那對它進行變更都不會被 git 監控到。

關於 git 檔案狀態變化可參考此文,其中有下圖解說

範例

檔案都未進行版本控制前,輸入git status顯示以下資訊,由圖中資訊可知目前 working directory 有三個檔案未進行版本控制。

若想對test.js進行版本控制,輸入git add test.js。用git status確認,可知test.js這個檔案已加入版本控制(staging area)且尚未被 committed(即尚未加到 repository)。

想把所有的檔案都進行版本控制,輸入git add .。用git status確認可知全部檔案都已進行版本控制(都加入 staging area)。

若想把已進行版本控制的test.text移出 staging area,輸入rm --cached test.txt後用git status確認可知各檔案狀態。


git commit

用途:新建版本(儲存對 staging area 中任何檔案的變更,並將檔案移到 repository)
指令:

  • git commit 進入 vim 編輯提交的記錄,儲存離開後就建立版本
  • git commit -m ‘message’ 建立版本並留訊息,其中-m就是 message 的意思
  • git commit -am ‘message’ 直接把檔案加到 repository 以新建版本(此指令對 new file 沒用所以還是要先git add
  • git commit --amend 進入 vim 修改 commit 內容(可用來修來 message)

註:git commit過後的檔案,若想再次建立新版本,則要再次git add然後再git commit,因為實際加入的是檔案的『變更』而非檔案本身。想省步驟可以用git commit -am ‘message’


git log

用途:顯示版本歷史記錄(版本代號、作者及時間)
指令:

  • git log 顯示完整資訊,包含版本代號、作者、時間及建立版本時所留訊息
  • git log --oneline 顯示簡短資訊,包含版本代號及建立版本時所留訊息

git checkout

用途:切換到其他版本
指令:

  • git checkout <branchname> 切換到指定版本
  • git checkout -b <branchname> 開一個新個 branch 並切換過去
  • git checkout master 切換到最新狀態
  • git checkout -- <file> 將修改後的檔案回復到未更動狀態
  • git checkout -- . 將所有檔案回復到未更動狀態

應用:
如果遠端有新的 branch 而本機沒有,可以直接用git checkout <branchname>切換到該 branch,且本機也會存有該 branch 的資料。


.gitignore

用途:不想放到備份的資料,可以用放到.gitignore管理,放在裡面的資料會自動被 git 忽略。
指令:touch .gitignore 建立檔案


git diff

用途:查看在 staging area 的檔案目前更動的部分
指令:git diff


git branch

用途:管理 branch
指令:

  • git branch -v 查看目前有哪些 branch
  • git branch <branchname> 建立新 branch
  • git branch -d <branchname> 將 branch 刪除
  • git branch -m <branchname> 修改當前 branch 名稱至填入的新名稱

git merge

用途:合併 branches
指令:git merge <branchname> 把 branch 合併進來
註:通常會在 GitHub 上面進行 merge(使用Pull requests),下面再提。

注意

當 merge 時若有 conflict,git 會把有衝突的檔案標出來。
CONFLICT (content): Merge conflict in code.js

使用者需要開啟該檔案,就會發現上面會標記有衝突的片段,使用者要自己手動修改檔案並儲存。


git reset HEAD^

用途:commit 之後以此指令可返回到未 commit 狀態
指令:

  • git reset HEAD^ --soft 保留更改的東西,回到 staging area
  • git reset HEAD^ --hard 所有更改的東西都刪除回到沒有 commit

適用情境: commit 了但是又不想 commit,想回到先前狀態


還不清楚怎用待補充

git hook

用途:預防錯誤

參考:

Customizing Git - Git Hooks

維持團隊開發程式碼品質的好工具 — Git Hooks & Husky


GitHub 簡介

**基本知識**
在別人的專案頁面可能會直接看到有專案介紹,那是頁面顯示 README.md 的結果。

GitHub flow

Understanding the GitHub flow
建議使用的工作流程。

GitHub flow


把本機的資料放到 GitHub 上

  1. 先在 GitHub 裡開一個新的 repository

  2. 把自己的專案加遠端的 repository
    在 Terminal 輸入git remote add origin <url>
    加遠端的 repository,位置就是後面<url>的部分

  3. 把 local 的專案 push 到 GitHub
    在 Terminal 輸入git push -u origin master
    把你的專案的 master 資料 push 到 origin 的 master


更新內容到 GitHub: git push

若之後有更新想要 GitHub 也有最新內容,則一樣用push上傳
在 Terminal 輸入git push origin <branchname> (上一條的 -u 可省略)

注意:

若已經commit而且又push了,就沒法更改 message 內容。
最好的方法還是push之前先檢查一下,避免錯的東西被放到遠端。


抓 GitHub 內容下來: git pull

若 GitHub 上面有更新版本的檔案,使用者想把那些內容抓下來,
則在 Terminal 輸入git pull origin master

pull一樣可能會產生 conflict,解決方法和本機處理一樣


複製內容: git clone

在 GitHub 上面看到有用的專案想下載下來用,基本上那些 repository 是沒有權限直接修改的,所以要先在 GitHub 上面Fork,就會存成一份自己帳號下的 repository,

Fork 完之後在自己的 repository 裡按Clone or download,並複製網址。

然後在 Terminal 中輸入git clone <url>,就會把 GitHub 上的 repository 下載到自己的裝置。

若修改後要更新 GitHub 的 repository,則一樣用push


合併內容: Pull requests

通常會在 GitHub 上面進行 merge(使用Pull requests),因為 GitHub 會直接顯示 branch, commit, file... 等差異。

點選Pull requests並按Compare & pull request

顯示差異

確認並 Merge

#Git #Github #Developer Tools #learning #Web Development #網頁開發






Related Posts

eclipse 的 debug 小幫手

eclipse 的 debug 小幫手

Python Monkey Patch 入門教學

Python Monkey Patch 入門教學

[Day 4] JS in Pipeline (4): Configs and Secrets

[Day 4] JS in Pipeline (4): Configs and Secrets



Sponsored



Comments