
帶你深入淺出 Git 版本控制實戰
課程連結: 
1. 版本控制是什麼?為什麼要做版本控制
版本控制是一種管理軟體開發過程中對 code 變更的技術。它允許開發者跟蹤和管理程式碼的歷史變更,協作開發,並且可以在需要時恢復到先前的版本。
很多人作版本控制的方法是把檔案複製到另一個目錄(如果他們夠聰明的話,他們還會幫資料夾加上時間)。這種做法很常見,因為這樣做很簡單,但是卻也非常容易產生離譜的錯誤。這種做法非常容易搞混資料夾,意外寫錯檔案或複製覆蓋到不想要的檔案。
而透過「版本控制系統」可以清楚的記錄每個檔案是誰在什麼時候加進來、什麼時候被修改或刪除。Git 就是一種版本控制系統,也是目前業界最流行的版本控制系統,沒有之一。
出社會工作,有 Git 幫你保留這些歷史紀錄跟證據,萬一出事的時候你就能知道是從什麼時候開始就有問題,以及知道該找誰負責,再也不用自己背黑鍋了!
2. 事前準備
- 一臺電腦
- 註冊 GitHub 帳號
- 檢查電腦是否已安裝 Git
# Windows可以使用where來確定指令是否可用where git
# Linux與macOS則可以使用which或command -v來檢查which git# 或者command -v git3. 安裝 Git
- 進入Git 官網的下載頁面(https://git-scm.com/downloads)後選擇自己的作業系統

Windows

- 下載完開啟安裝檔後一直按 Next 就行
看到這個頁面就代表安裝成功了
Linux/macOS
- macOS 與 Linux 則需要使用指令安裝
# macOSbrew install git
# Linux# 針對各種系統發行版與套件管理器有不同的安裝方式
# apt(Ubuntu/Debian/Linux mint)sudo apt install git -y
# pacman(Arch Linux)sudo pacman -S git --noconfirm
# Fedorasudo yum install git -y# fedora 22之後需使用下面指令sudo dnf install git# 快速查看自己使用的Linux系統發行版:# cat /etc/os-release | grep "^PRETTY_NAME="| cut -d'=' -f2
4. 基礎概念
Git 主要分為 4 個區塊及 4 種狀態
Git 區塊
- Working Directory (在此簡稱:W):現在存在於資料夾內的、編輯器可以打開的位置。
- Staging Area (在此簡稱:S):暫存狀態。
- Local Repository (在此簡稱:L):本地(自己的電腦上的)倉庫。
- Remote Repository (在此簡稱:R):遠端(不在自己的電腦上的)倉庫。
Git 狀態
- Untracked:未被追蹤。
- Unmodified:追蹤中,未修改。
- Modified:追蹤中,已修改。
- Staged:追蹤中,待提交。
開始使用
本地設定
相關指令
-
git -h:顯示 Git 的幫助訊息git [指令] -h:顯示特定 Git 指令的幫助訊息
-
git init:在當前目錄下建立一個.git的隱藏資料夾用來儲存 Git 的相關資訊- 其他選項
Terminal window git init <資料夾名稱> # 在指定的資料夾下建立Git倉庫git init -b <分支名稱> # 初始化時同時將預設分支設定為指定的分支名稱 -
git add <檔案名稱>:將檔案加入 Staging Area- 一次可以加入多個檔案,也可以使用
git add .將目前資料夾下的所有檔案加入 - 其他選項
Terminal window git add -A # 將所有檔案加入git add -u # 將已經被追蹤的檔案加入git add -f # 強制加入檔案 - 一次可以加入多個檔案,也可以使用
-
git commit -m <訊息>:將 Staging Area 的檔案提交到 Local Repository-m後面的訊息是這次提交的訊息,可以讓其他人知道這次提交的目的- 也可以不加
-m,這樣會進入一個編輯器讓你輸入訊息 - 其他選項
Terminal window git commit -a -m <訊息> # 將所有已經被追蹤的檔案加入Staging Area並提交git commit --amend -m <訊息> # 修改上一次的commit訊息 -
git status:檢視目前 Local Repository 與 Staging Area 的狀態- 會顯示目前有哪些檔案在 Untracked、Modified、Staged 等狀態
-
git diff:檢視與上一版本之差異。 -
git reset <檔案名稱>:將檔案從 Staging Area 移除- 預設會將指定的檔案從 Staging Area 移除,但不會影響 Working Directory
- 其他選項
Terminal window git reset HEAD # 將所有在Staging Area的檔案移除git reset --hard # 將所有在Staging Area的檔案移除並且捨棄Working Directory的修改
遠端操作
在講解遠端操作前,我們需要先設定好遠端倉庫的 SSH Key,這樣才能夠透過 SSH 的方式連線到遠端倉庫。
建立 SSH Key
ssh-keygen -t ed25519 -C "<你的email>"# 或者,如果你的電腦不支援ed25519ssh-keygen -t rsa -b 4096 -C "<你的email>"
# 輸入 keys 檔案要放的位置與名稱,沒有要改就 Enter> Enter file in which to save the key (/home/<user>/.ssh/id_ed25519):
# 設定通行密碼,沒有要改就 Enter> Enter passphrase
# 再輸入一次通行密碼,沒有一樣 Enter 就好> Enter same passphrase again:- 接著輸入指令或用記事本打開公鑰。
cat ~/.ssh/id_ed25519.pub# 或者notepad ~/.ssh/id_ed25519.pub- 複製公鑰內容,並且將公鑰加入到遠端儲存庫的 SSH Key 設定中(以 GitHub 為例)
- 進入 GitHub 的設定頁面

- 選擇
SSH and GPG keys
- 按下
New SSH Key
- 在
Title中輸入自己取的 SSH Key 名稱,然後在key輸入剛才的 SSH 公鑰。最後按下Add SSH Key就完成了
- 進入 GitHub 的設定頁面
遠端相關指令
-
git remote:檢視目前有哪些遠端倉庫- 顯示目前有哪些遠端倉庫,並且會標示預設的遠端倉庫
- 其他選項
Terminal window git remote add <遠端倉庫名稱> <遠端倉庫網址> # 新增一個遠端倉庫git remote remove <遠端倉庫名稱> # 移除一個遠端倉庫git remote set-url <遠端倉庫名稱> <遠端倉庫網址> # 修改遠端倉庫的網址git remote -v # 顯示遠端倉庫與網址git remote rename <舊遠端倉庫名稱> <新遠端倉庫名稱> # 修改遠端倉庫的名稱 -
git branch:檢視目前有哪些分支- 會顯示目前有哪些分支,並且會標示目前所在的分支
- 其他選項
Terminal window git branch <分支名稱> # 建立一個新的分支git branch -d <分支名稱> # 刪除一個分支 -
git checkout <分支名稱>:切換到指定的分支- 其他選項
Terminal window git checkout -b <分支名稱> # 建立一個新的分支(如果該分支不存在)並切換到該分支git checkout -- <檔案名稱> # 捨棄對檔案的修改 -
git push <遠端倉庫名稱> <分支名稱>:將 Local Repository 的分支推送到遠端儲存庫- 將 Local Repository 的分支推送到遠端儲存庫
- 其他選項
Terminal window git push -u <遠端倉庫名稱> <分支名稱> # 設定預設推送的遠端倉庫與分支 -
git clone <遠端倉庫網址>:複製一份遠端倉庫到本地- 在當前目錄下建立一個資料夾,資料夾名稱就是遠端倉庫的名稱
- 其他選項
Terminal window git clone <遠端倉庫網址> <目標資料夾路徑> # 指定複製到指定位置 -
git pull <遠端倉庫名稱> <分支名稱>:從遠端儲存庫拉取分支- 將遠端儲存庫的分支拉取到 Local Repository
- 其他選項
Terminal window git pull # 從預設遠端倉庫拉取分支git pull --rebase # 使用rebase方式拉取分支
5. 協作流程
Git Flow

- 特點:
- 不同分支,不同功能。
- 優點:
- 流程清晰可控
- 缺點:
- 需要同時維護 main/master 分支與 delevop 分支兩個長期分支
- 對於中小型專案來說過於複雜且管理分支對初學者或新團隊來說會提高負擔
GitHub Flow

- 特點:
- 簡化版的 Git Flow
- Pull Request(PR)
- 優點:
- 只有一個長期分支 - main/master 分支
- 缺點:
- 正式環境更容易出問題
- 在沒有適當測試和健全的 CI/CD、代碼審核……等過程下更容易發布問題到生產環境。
GitLab Flow
1.持續部署
2.版本發布

特點:
- upstream first(只有 main/master 作為主要分支)
有興趣自己可以去瞭解的知識
指令類
- git blame
- git rebase
- git cherry-pick
- git merge
其他
- commit message 規範
- 如何發 pull request
作業

- 複製(Fork)這個 repo(https://github.com/c8763yee/git-lec)到自己的Github,然後Clone到自己的電腦
- 在 shared 資料夾將以下的 code 儲存並命名為自己的學號後 push 到自己剛才 Fork 的 GitHub Repo
#!/bin/bashecho 'helloworld'- (可做可不做)發一個 Pull Request 到上面的 repo 並且在留言區中寫上自己的名字與學號
表單連結

分享文章
生成精美分享圖或複製連結,與更多人分享本文。
繼續閱讀
最後更新於 ,距今已過 258 天
部分內容可能已過時

評論