跳至主要内容

git and github

2023/12/06 (Wed) 19:00 - 21:00

講師:李宥丞 Leo


Git 是啥?為什麼要用它?


想想看,這個畫面是否曾經似成相似

在跟組員一起做專案時,要把別人寫好的 code 拿到自己的檔案中


或是這個 每做一個新的功能,就要新增不同版本的檔案


什麼是 Git

  • 版本管理工具
  • 分支管理
  • 協作和合併

來實際使用吧~


安裝 Git


Ubuntu 安裝方式

sudo apt update #更新系統
sudo apt install git

測試看看有沒有成功裝上

git --version


安裝 VSCode Extension



Git 概念



Master &Branch


Master(主分支),為開發時的主要線路 Branch(分支),在某些情況下使用


建立本地數據庫 (Local Repository)


cd 資料夾名稱; # 到想要執行的資料夾內
code . # 開啟 VScode
crtl + ` ; # 在 VScode開啟終端機
git init # 初始化 git

設定 config 內容

git config --global user.name 名字;
git config --global user.email Email;

檔案追蹤與提交版本


查看當前工作目錄狀態

git status

以下範例是尚未追蹤到的檔案 (index.html)


追蹤檔案

git add 檔案名稱;

git add index.html
git add .  #追蹤所有檔案
git add -A #追蹤所有檔案

已追蹤但尚未提交版本 (index.html)


取消追蹤

如果想要取消追蹤 可以利用 git restore 檔案名稱;

git restore index.html

提交版本

git commit -m "<版本說明>";

git commit -m "新增標題"

修改最新的版本內容

利用 git commit --amend -m 修改 commit 訊息

git commit --amend -m  "修改標題"

若已經 commit 完但想要再新增檔案到同個版本

git add .
git commit --amend
git commit --amend --no-edit  #不修改訊息直接新增檔案

撤銷 commit

可以利用 git reset 取消修改

git reset HEAD^ #取消最後一個commit並移到HEAD的前一個commit
git reset --hard HEAD^ #跟上述差在--hard會直接刪除本地的修改

HEAD 指標


HEAD 實際上就是一個指針,指向當前的節點 可以當作是現在位置的意思


查看版本紀錄

利用 git log 可以查看歷史版本紀錄,內容包括

commit ID(hash) 提交作者 提交日期 提交訊息

更多 git log 用法


查看引用紀錄

利用 git reflog 可以查看 HEAD 的移動紀錄 以及分支的操作紀錄

log 與 reflog 的差別


移動 HEAD

利用 git switch 分支名稱; 可以切換 HEAD 到不同的分支

git switch dev     #移到到分支 dev 上

git switch master  #移到到主線上


也可以利用 git switch -d commit ID; 將 HEAD 移到指定的版本上

git log --oneline
git switch -d 6180933
git log --oneline

git log 只能看比 HEAD 更早的紀錄


分支管理


在開發過程中,當我們想要

  • 開發新功能
  • 修改 Bug
  • 測試新想法
  • 多人協作 ...

就會使用分支功能


新增分支

利用 git branch 分支名稱; 創建一個分支 並利用 git switch 分支名稱; 指向新分支

git branch dev
git switch dev #將 HEAD 移到分支上

也可以直接利用 git switch -c 分支名稱; 新增分支並將 HEAD 指向新分支

git switch -c dev  #新增分支並移到分支上

修改分支名稱

git branch -m 舊名稱; 新名稱;

刪除分支

較安全的刪除

git branch -d 分支名稱;

強制刪除

git branch -D 分支名稱;

-d 與 -D 的差別


撤銷刪除分支

可以利用 git reflog 查看被刪除前的 commit hash 再利用 git branch 分支名稱; hash值; 還原

git reflog
git branch dev 88961cc

合併分支

如果想要讓 master 繼續為主線 則需要先 switch 到 master 上 再利用 git merge 分支名稱; 合併


git switch master
git merge dev

合併前

合併後


如果想要保留支線的合併紀錄 則可以利用 git merge 分支名稱; --no-ff

git merge dev --no-ff


並不是每一次的合併都能那麼順利 如果有兩個分支都更改了同一個檔案的同一個內容 在合併時就會出現合併衝突,則需要手動修改

git add .
git merge --continue #繼續合併
git merge --abort #取消合併

合併衝突例子


另一種合併方式

當我們想要

  • 將多個 commit 濃縮成一個
  • 將目前分支移到其他分支上

就可以利用 git rebase 指令實現


濃縮多個 commit

可以利用 git rebase -i HEAD~數字; 將指定數量的 commit 濃縮在一起

git rebase -i HEAD~3 #將HEAD的前3個commit合併在一起


若要把 HEAD~3 &HEAD~2 合併到 HEAD~1 需要把 2、3 的 pick 改成 squash

  • pick: 保留
  • squash: 合併

ctrl+S ctrl+X 保存並退出


接著只要將舊的 commit 訊息註解 並在最開頭加上新的 commit 訊息 ctrl+S ctrl+X 保存並退出


順利的話就會完成合併

如果有衝突的話就解決 並加上 git add .git rebase --continue


將分支移到別的分支上

假設目前有 dog 和 cat 兩個基底為 master 的分支


想要將 cat 分支移到 dog 分支上 需要先將 HEAD 移到 cat 上再合併

git switch cat 
git rebase dog


|||


觀察 cat 分支前後合併的 hash 發現 rebase 並不是直接移植分支 而是複製一個分支到 dog 分支上


GitHub


目前都只是在本地端做版本管理 可以試著將專案推上雲端 來達成更多功能


註冊

按下右上角的『Sign up』


填寫個人資料

請輸入要使用的信箱、密碼、使用者名稱

要記得到信箱收啟用信喔!


登入GitHub

回到首頁後,點選『Sign in』按鈕

輸入剛剛註冊的帳號或密碼


Dashboard

登入後,這裡就是你的儀表板(主頁)

接下來,要進行SSH的金鑰交換


進入設定區域

Step 1Step 2Step 3
點選右上角的人頭在選單中點選『Settings』在左側列表中選擇『SSH and GPG keys』

新增SSH金鑰

剛剛註冊的使用者,這個列表會是空的

請按下右上角的『New SSH key』


填入必要的資訊

接下來要在電腦端生成非對稱加密的公鑰/私鑰對 並將生成的公鑰填入到畫面上的『Key區塊』中


生成所需要的鑰匙對

sudo apt install ssh #下載ssh
ssh-keygen

工具會詢問儲存位置與密碼短語,按下Enter可跳過


印出自己的公鑰資訊

br/;

more ~/.ssh/id_rsa.pub


複製並貼入到網頁中

按下『Add SSH key』後,新增就完成了

; 若使用者名稱是中文,請幫紀錄加上英文的Title,避免新增失敗!


確認鑰匙在列表上

當鑰匙建立後,會在標題列顯示對應的電腦名稱,如果有手動設定標題,會顯示自己填寫的內容,若沒有,請回頭看一下自己複製的內容的最後一段


建立一個儲存庫

首頁右上角頭像 -; repository -; New


從本地端設定Remote並推送


設定遠端位置

git remote add origin repo url;

推送本地端內容到GitHub

git push origin main

回到 GitHub 上確認內容


從 GitHub 上下載內容到本地端

git clone 儲存庫位置;


更新內容

當遠端資料有新的內容,可以將它拉到本地端中

git pull

結尾


今天聽了那麼多內容腦袋是不是快爆了呢 ^^ 老實說 Git 能玩的東西非常多,今天一定講不完

學習最快的方法就是直接練習 在寫程式作業或是開發時 都可以用用看 Git &GitHub 是真的好用 👍


Bye~