前言
分支介紹
我們現在開發的分支一般是這樣的(基於上面那張圖片的):
master:上線用的
dev:開發用的
featature_xxx:開發用的
test:測試用的
hotfix:修復bug的
一般是這樣子的:
公共分支:
master、dev、test,一般是不會這些分支上開發的,都是由別的分支合併到這些分支上
私有分支:
feature_xxx,hotfix_xxx,這些分支一般是由某個人或某幾個人一起開發一個功能點
feature_xxx從dev分支分出來
feature_xxx合併到test去測試
feature_xxx合併到devdev合併到master
master打tag上線
hotfix分支從master分支分出來
hotfix分支合併到test去測試
hotfix分支合併到master
master打tag上線
hotfix分支合併到dev
常用指令
git branch 檢視當前的分支
git checkout xxx 切換到xxx分支
git checkout -b xxx 基於當前分支建立分支xxx,並切換到xxx分支
git status 檢視檔案處於什麼狀態
git add xxx 放到暫存區,等待被commit
git commit -m "xxx" commit操作,等待被push
git push 將本地分支推向遠端分支
git pull 遠端分支同步到本地分支
git merge xxx 將xxx分支合併到當前分支
git log --oneline --graph 檢視提交歷史記錄
關於 git merge
- 第一種情況
feature_a是從dev分支分出來的,如果將feature_a合併到dev分支中,並且dev分支沒有任何更改的情況下,使用merge命令的話,dev的頭指標只是移動了一下,如下圖所示
- 第二種情況
如果dev分支做了改動的話,那麼會新建一個commit的點,如下圖所示
git merge
指令會根據不同的情況自動執行
git merge --no-ff
會強行採用第二種方案,也就是總會新建一個commit點
關於 git rebase
rebase也是合併操作,與merge不同的是,rebase 命令將另一分支上的所有修改都移至當前分支上
下面是分支情況,我們現在要把dev分支合併到feature_a上
如果採用merge的話,會產生下圖效果
如果採用rebase的話,會產生下圖效果,它把dev修改的commit都移動到feature_a的前面了
關於git pull
git pull 的操作是git fetch & git merge
git pull --rebase 的 操作是 git fetch & git rebase
最佳實踐
git merge --no-ff:私有分支往公共分支合併的時候,比如feature_xxx往dev或test上合併的時候,產生新的commit,代表著有合併的記錄
git rebase:feature_xxx需要和dev同步時,合併dev的時候,因為feature_xxx最終會合併到dev,如果採用merge的話,會有好多新的commit
git pull --rebase:使用這個命令進行git pull,不會產生新的commit
思考
不確定:當兩個feature_xxx合併的時候,應該用git merge還是git rebase呢?小夥伴有什麼想法可以留言一下哈