Git使用感悟

eaglelihh發表於2020-08-30

前言

分支介紹

Git使用感悟

我們現在開發的分支一般是這樣的(基於上面那張圖片的):
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

  1. 第一種情況

feature_a是從dev分支分出來的,如果將feature_a合併到dev分支中,並且dev分支沒有任何更改的情況下,使用merge命令的話,dev的頭指標只是移動了一下,如下圖所示


  1. 第二種情況

如果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呢?小夥伴有什麼想法可以留言一下哈