【Git學習筆記5】以普通模式合併(–no-ff)、push到遠程庫及分支管理策略
- 2019 年 11 月 11 日
- 筆記
一、以普通模式合併(–no-ff)
合併分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支資訊,啥?不記得啦?那等會我們學習完給你再舉個栗子吧,看看這個fast forward的示意圖。

如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支資訊。下面我們實戰一下–no-ff方式的git merge:
第一步:仍然創建並切換dev分支:

第二步:修改readme.txt

第三步:提交一個新的commit

第四步:切換回master分支

第五步:git merge –no-ff -m "merge with no-ff" dev

因為本次合併要創建一個新的commit,所以加上-m參數,把commit描述寫進去。(抱歉哈,我手抖,打錯啦,commit要有意義,所以你就不要和我一樣手抖啦),合併後,我們用git log看看分支歷史:

可以看到,不使用Fast forward模式,merge後就像這樣:

其實我們已經Fast forward模型操作過啦,那還是再複習一波吧。


看到兩個的區別了么?

合併分支時,加上–no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。
二、push到遠程庫
搞了這麼久,一直都沒有推到遠程庫去,push一波。


如果你如果你遇到了問題:
Failed with error: RPC failed; curl 52 Empty reply from server

莫慌,發現原因是:http快取不夠或者網路不穩定,網路不穩定可以選擇等下在push,或者用以下解決方案,避免通過下面解決方案導致未知問題,我建議還是等下再push一下。
解決方案如下:
- httpBuffer加大,git config –global http.postBuffer 524288000 // 這行添加後就生效了
- 壓縮配置,git config –global core.compression -1
- 修改配置文件
- export GIT_TRACE_PACKET=1
- export GIT_TRACE=1
- export GIT_CURL_VERBOSE=1
以上配置文件修改,也可以大幅度提升git 克隆速度。
操作完啦,來學習一波:
- git push命令用於將本地分支的更新,推送到遠程主機。它的格式與git pull命令相仿。
- git push <遠程主機名> <本地分支名>:<遠程分支名>
- git push –all origin,命令表示,將所有本地分支都推送到origin主機。如果遠程主機的版本比本地版本更新,推送時Git會報錯,要求先在本地做git pull合併差異,然後再推送到遠程主機。這時,如果你一定要推送,可以使用–force選項;
- git push –force origin ,命令使用–force選項,結果導致遠程主機上更新的版本被覆蓋。除非你很確定要這樣做,否則應該盡量避免使用–force選項。
三、分支管理策略
需要非常深刻知道的分支策略呀。在實際開發中,我們應該按照幾個基本原則進行分支管理:
第一,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
第二,幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合併到master上,在master分支發布1.0版本;
第三,我們和小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合併就可以了。
所以,團隊合作的分支看起來就像這樣:

往dev上merge,然後再在master上merge。
說句題外話:小白做菜的風格你看到了嗎?就是圖多文字少,因為實操證明一切。就是這麼干!