常用到覺得好像不需要介紹了…。
基礎
- git init (初始化)
- git status (查看git進度)
- git diff master origin/master (看本地與遠端差異)
- git log (查commit id)
- git show
(看某個commit的diff) - git –set-upstream-to=origin (設定上游)
- git restore . : 還原所有更動
- git rm –cached
: 將檔案加入untracked - git rm -r –cached . : 全加入untracked
程式
何時pull
在開始工作之前 (以便了解最新的更改)
在推送之前 (以防工作時發生了變化)
- git clone (下載)
- git pull (方便,下載並自動merge到本地,需處理衝突== fetch+merge)
- git fetch origin master (安全,只下載主線程式不merge)
- git merge origin/master (合併主線到當前分支)
- git reset –hard (pull不過就覆蓋本地更改)
分支
開分支與設定上游
- git branch
(開新分支dev) - git push –set-upstream origin
(開新分支指定上游) 查看與切換分支
- git branch (-r看遠端分支, -a 本機與遠端)
- git checkout -b
(建立並切換到新分支dev) - git checkout -b
(基於 commit開分支) - git checkout master (切到主分支)
遠端分支
git branch -v -a (看所有遠端分支)
remotes/origin/
…git switch
(切到某個遠端分支, 只需分支名稱
)git checkout -t origin/
(切換到另一個遠端分支) git merge origin/main (將主線合併至新分支)
git merge origin/
(將特定分支合併回目前分支)
不要怕開分支, 最少功能, 開發, 驗證三分支
只選擇某commit id 合併到主線
1 | * git log 查找要合併的commit id |
Push到遠端主線
1 | `git init` |
git tag與commit id差異
- 比commit id更直觀
- 重要發行標記, 輕鬆地回到該版本
- 標記已經審查過的提交
創建標籤: git tag
在特定的提交點上創建標籤: git tag
查看標籤:git tag
查看特定系列的標籤: git tag -l “v1.8.5*”
看特定標籤: git show
刪除標籤:git tag -d
分支會隨著提交而移動,但標籤則是固定留在某個提交點上
Merge/Pull Request
發MR/ PR, 將分支並回主線, 在gitlab介面操作。
發PR去比較新branch與main這個原本branch之間的差異,附上敘述告知專案管理者我做了什麼,管理者再審核是否接受這些修改並merge到「main」分支之中。
回復
- git reset -h
–mixed reset HEAD and index
–soft reset only HEAD
–hard reset HEAD, index and working tree(丢弃回退的提交中的所有更改) - git reset –hard HEAD (回復到上次提交版本)
- git reset HEAD^^ –hard (^^ (两个^)表示回退2个提交)
- git reset –hard
(回復到指定的提交版本) - git reset –hard origin/main (分支同步回主線狀態)
- git log –oneline -5 (查看最近5筆提交紀錄)
- git reset –hard HEAD~2 (移除最新2筆commit)
刪除
Delete Local Branch
- git branch –delete
- git branch -d
# Shorter version - git branch -D
# Force-delete un-merged branches
- git branch –delete
Delete Remote Branch
- git push origin –delete
# Git version 1.7.0 or newer - git push origin -d
# Shorter version (Git 1.7.0 or newer) - git push origin :
# Git versions older than 1.7.0
- git push origin –delete
Deleting a local remote-tracking branch
- git branch –delete –remotes
/ - git branch -dr
/ # Shorter - git fetch
–prune # Delete multiple obsolete remote-tracking branches - git fetch
-p # Shorter
- git branch –delete –remotes
上傳
- git add
(或. 全add, add前要先pull) - git restore
(忽略某個檔案更動) - git clean -f (清除所有untracked files)
- git remote add
(添加遠程倉庫) - git cherry-pick
(只選特定commit) - git commit -m
- git commit –amend (修改最後一次commit)
- git push –set-upstream origin
(第一次上分支,或第一次上失敗再上一次) - git push (僅僅是推送目前所在的分支到遠端,並不會指定推送哪個分支)
- git push origin master (明確指定推送 master 分支到 origin 這個遠端)
- git push origin HEAD:master push到遠端master
異常
git reset –hard HEAD
git pull
1 | git pull |
git分支commit過的變更合併到主線
1 | git checkout master |
Repo
基於git, 用於Android程式同步
1 | 1. repo init (Installs Repo in the current directory) |
Gitflow v.s. Github flow
Gitflow: master、dev、hotfix、feature四類分支
- master:主線
- dev:從master拉新功能開發,分支經測試後入主線
- feature:從dev拉功能開發分支,進行pull request請求,申請將分支合入dev,開發中最常用
- hotfix:bug修復,或緊急需求開發分支(不在此分支開發新需求)。從master分出,經開發測試完成之後,可以pull requets合入master
注意
- feature只能從dev分支拉出,hotfix分支只能從master拉出
- pull request前須先pull
- hotfix pull master
- feature pull dev
- dev穩定後merge 回master
- Dev只能動到feature, hotfix, Ops提交到master或dev
Github flow: master, develop
重視CICD
推薦用SourceTree視覺化
如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)