Git/Github[1]

20251128 北資大社課

 Claire

  • 北資一六社長 x 網管
  • 競程是舊愛 而且我很爛
  • 新歡大概是資安
  • 但我都只打水題
  • 樹枝爆肝仔

Who am I

1

Version Control

3

Git/Github

5

References

2

 

 

 

What is Git?

4

 

 

 

CLI

Index

The Three Stages

Working Directory

  • 直接編輯的地方
  • 在桌機上肉眼可見,可直接操作
  • $ git status:Untracked Files / Changes not staged for commit
  •  $ git add <file> 把檔案扔到暫存區

Staging Area

  • 數據暫時存放紀錄哪些檔案即將要被提交到下一個 commit 版本中
  • 用以針對不同狀況去操作不同指令來控制檔案
  • $ git status:Changes to be committed、new file
  • $ git commit <file> 扔進 repo
  • 第三階段:repo

Commit

Commit

  • 一個快照
  • 作者(Author)、時間(Timestamp)、訊息(Message)、唯一識別碼(Hash, SHA-1)
  • $ git log 查看完整 commit 歷史
    • $ git log --oneline --graph --decorate
$ git add .
$ git commit -m "commit message"

HEAD

  • 目前檔案所在版本的指標
  • 指向當前分支的最新 commit

How to Commit

  • 應該只完成一件事
    • 一次處理很多事拆分後再 commit
  • commit message : Why 和 What
    • 分成 Header、Body、Footer
    • Header 用祈使句,可包含 Type

Branch

Branch

  • 一條版本線
  • 在 commit 鏈上開分支
  • 做不同事可以各自獨立
  • 修改成熟前正在運行的服務不會被影響
  • 不同 branch 之間的 commit 紀錄是獨立的
$ git branch feature1		# 建立 feature1 這個 branch
$ git checkout feature1		# 把 HEAD 移到 feature1
Switched to branch 'feature1'

$ git checkout -d feature2	# 建立 feature2 這個 branch 並把 HEAD 移到 feature2
Switched to a new branch 'feature2'

Conflict

Conflict

  • 遇到同一段內容在兩個分支被不同方式修改
  • Conflict:Git 無法自動決定要保留哪一個版本

Conflict

...
<<<<<<< HEAD (Current Change)
你在的 Branch 的 Commit
=======
Merge 進來的 Branch 的 Commit
>>>>>>> branch-name (Incoming Change)
...
  • 直接進行編輯,留下最後的版本就好
  • 編輯完先  $ git add 再  $ git merge --continue

Merge

Merge

  • 將另一個分支的歷史合併到目前所處的分支
  • 合併後會產生新的 merge commit
  • 保留兩條分支的歷史
$ git merge <branch> -m "merge message"

Rebase

$ git checkout <你要接在後面的那個 branch>
$ git rebase <接在你前面 branch>

Rebase

  • 將一個分支的 commit 搬到另一個分支的最尾端
    • 歷史變成線性
  • 線圖是一種展示 commit 依賴性的工具
    • 前後依賴性可用 rebase
  • Rebase 完會需要 force push,蓋掉一些 commit
    • 一般 push 只允許把遠端指標往前推(fast-forward)
    • rebase 把遠端指標拉回去再換一條新的歷史

Rebase

Rebase

$ git checkout cat
$ git rebase dog

Squash

$ git rebase -i HEAD~n
  • 把一坨 commit 擠成同個
  • 幾乎不會也不該用到

Workflow

Workflow

  • 要怎麼開 Branch
  • 每個 Commit 要在哪
  • Merge 順序要是什麼
  • 確保分支有系統和固定邏輯

Github Flow

  • master:最新穩定版本
  • feature:新功能或是要修東西
    • pull request:修好了開始程式碼審查、討論
    • continuous deployment:合併回主分支

Git Flow

  • master:經過測試且打好版本標籤
  • develop:完成 code review 並準備整合的新功能
    • 開發期間的自動化測試與驗證
  • feature/*:每個新功能或需求
    • 從 develop 分出,開發完後再合併回 develop
  • release/*:develop 上達到下一個版本標準時切出
    • 最終測試相關修正和文檔更新
    • 同時合併到 master 與 develop
  • hotfix/*:線上出現重大問題立刻切出來修
    • 修完合併到 master 與 develop 同步

實作

實作

  • 建立一個資料夾
  • 在裡面見一個檔案然後讓 git 版控
  • 建一個 branch 
  • 練習 merge/rebase
  • 可以用用看 vscode 連 github 的功能

Thank You!

Git/Github[1]

By Claire Pan

Git/Github[1]

  • 32