Git - fantasy0107/notes GitHub Wiki

cheat sheet Git 面試題

練習

  1. gitflow 各種類分支的意思?圖長怎麼樣?實際建出來
  2. commit?pull?push?Fetch?branch?merge?stash?discard?tag?各別意義?實際操作

Master

  1. 穩定、隨時可上線的版本
  2. 通常也會在這個分支上的 Commit 上打上版本號標籤

Hotfix

  1. 當線上產品發生緊急問題的時候,會從 Master 分支開一個 Hotfix 分支出來進行修復,Hotfix 分支修復完成之後,會合併回 Master 分支,也同時會合併一份到 Develop 分支

Release

  1. Develop 分支夠成熟了,就可以把 Develop 分支合併到 Release 分支,在這邊進行算是上線前的最後測試
  2. 測試完成後,Release 分支將會同時合併到 Master 以及 Develop 這兩個分支上
  3. 。Master 分支是上線版本,而合併回 Develop 分支的目的,是因為可能在 Release 分支上還會測到並修正一些問題,所以需要跟 Develop 分支同步,免得之後的版本又再度出現同樣的問題

Develop

  1. 所有開發的基礎分支
  2. Feature 分支都是從這個分支切出去
  3. Feature 分支的功能完成後,也都會合併回來這個分支

基本觀念

  1. .gitignore 會忽略掉檔案

原則

  1. 小功能或小改進或修一個 bug 為一單位
  2. unit test 在同一個 commit
  3. 無相關不再同一 commit
  4. 語法錯誤或半成品不能 commit

訊息

  1. 第一行摘要
  2. 有需要實際寫放在第三行
  3. 參考自己的文章

指令

  1. git status - 狀態
  2. git commit -m "FirstCommit" - 送出訊息
  3. git log - 歷史訊息
  4. git add file.extension - 追蹤檔案(unstaged -> staged file)
  5. git merge - 合併分支到當前分支
  6. git merge --no-f - 合併分支
  7. git tag - 列出標籤
  8. git pull - 合併遠端數據庫的分支的修改內容 = fetch + merge
  9. git push - 遠端數據庫建立分支/push修改內容到分支
  10. git stash- 儲藏將修改完成(working)的放到這裡面
  11. git discard - 取消修改內容
  12. git tag -a v1.4 -m 'my version 1.4' - 新增標籤和附加訊息
  13. git fetch - 抓取遠端但沒有合併
// 分支相關指令
git branch - 顯示分支
git branch branch_name  - 建立分支
git checkout branch_name - 切換分支
git branch -m old_branch new_branch - 修改分支名
git branch -d branch_name  - 刪除分支
git checkout -b branch_name -會切換分之如果沒有會建立後切換過去

// 切換到 master 並且合併cat分支
git checkout master 
git merge cat

分支相關

使用 rebase 合併
時機: 通常在還沒有推(Push)出去但感覺得有點亂(或太瑣碎)的 Commit,我會先使用 Rebase 分支來整理完再推出去

從字面上來看,「rebase」是「re」加上「base」,翻成中文大概是「重新定義分支的參考基準」的意思。
ex: 在 cat 分支上
git rebase dog
我,就是 cat 分支,我現在要重新定義我的參考基準,並且將使用 dog 分支當做我新的參考基準

合併衝突

Feature

  1. 開發新功能

使用 ssh 來連線 github

參考文章

建立 ssh key

ssh-keygen -t rsa -b 4096 -C [email protected]

輸入檔案名稱後一直按enter

設定 ssh 的 config(C:\Users<yourname>.ssh\config) 沒有就建立一個

Host github.com
    User your_name
    IdentityFile C:/Users/<yourname>/.ssh/<filename> (是private key file)

在 github 設定

Account -> Settings -> SSH and GPG Keys 下新增SSH key
填入 title 和 public key 的內容

測試連線 github

ssh -T [email protected]

問題

  1. merge 錯誤分支
git revert -m 1 <SHA-1>

放棄 merge

git merge --abort

⚠️ **GitHub.com Fallback** ⚠️