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