用Git解決5個開發常見問題

Git 是目前最流行的版本控制系統,GitHub 和 GitLab 是當前最流行的代碼託管平臺,熟練掌握 Git,可以說是程序員的必備技能。用 Git 可以解決很多問題,我整理了大家普遍關切的 5 個問題,並附上使用場景和解決思路,希望這樣的方式可以讓大家對 Git 有更進一步的認識,更好地掌握 Git、GitHub 和 GitLab。

1、怎麼修改版本樹的歷史?

使用場景:在快節奏的開發過程中,爲了及時保存某項開發成果,開發人員往往會通過創建一個 commit 的方式,把變更集正式保存下來,再繼續後面的開發。過了一段時間,當開發人員回頭審視代碼的版本樹,通常會發現有些 commit 需要重新修改,諸如 “commit 的說明內容有誤”、“commit 涉及的功能被砍掉,需 刪掉這些 commit” 和 “幾個 commit 合併成1個後,才能完整地代表同一個功能” 等情況。

解決思路:上述的場景都反映出:開發人員對於曾經的階段性變更(commit)有重新修改的需求,希望通過修改,可以把每個 commit 變得更有條理性、表述更準確和更易維護。我們可以藉助 Git 交互式變基(git rebase -i )來修改代碼版本的歷史。

視頻詳解:怎麼修改最新commit的message?

2、開發到一半被告知須立即修復線上 Bug,怎麼辦?

使用場景:開發人員正在爲 A 項目的新功能敲着代碼的時候,QA 過來通知線上發現重大 Bug,須開發人員立刻修復。這位開發人員如何快速地把 A 功能開發到一半的代碼保存起來,然後切換到線上版本對應的分支解決 Bug 呢?

解決思路:開發到一半的代碼,開發人員還不想通過 commit 的方式保存變更,但又想快速地把當前的工作進度保存起來,等修復完 Bug 後再調用出來。我們可以藉助 Git Stash 的方式,分別對暫存區和工作區的狀態進行保存。

視頻講解:開發中臨時加塞了緊急任務怎麼處理?

3、如何排除 Git 倉庫裏沒必要的文件?

使用場景:IT研發項目中,通常存在部分文件,在某些時刻它們會出現在項目的路徑中,但又不能把它們存放到 Git 代碼倉庫中。比如,有些應用的配置文件(裏面含有訪問數據庫的賬號信息);還有一些編譯後產生的二進制文件,它們由源代碼就可以再次創建出來,因此沒必要納入 Git 進行版本管理。就不同的開發語言,開發團隊如何快速識別不用 Git 管控的文件,並讓 Git 不再理會這些文件呢?

解決思路:在項目開始就把不用 Git 管理的文件配置到 .gitignore 文件中,Git 就不會理會這些文件了。而不同的開發語言該如何配置 .gitignore ,我們可以借鑑 GitHub 的做法。

視頻詳解:如何指定不需要 Git 管理的文件?

4、分支集成的時候,怎麼讓主幹分支保持 linear 的歷史?

使用場景:有些團隊爲了後期定位問題更加高效,特性分支合入到主幹分支的時候,主幹分支只會創建出只有1個 parent 的 commit,而不會生成有兩個 parents 的 commit。一旦特性分支的變更合入到主幹分支後,就可以把特性分支及其只屬於該分支的 commit 刪除掉。這麼做的好處:整個項目主幹分支的版本歷史永遠呈一條清晰的、無分叉的線;分支演變的歷史很清晰,查看歷史不易出錯;用 revert 做代碼回滾比較容易;用 bisect 查找哪個 commit 引入了問題,只需在主幹分支上查找即可,因此效率較高。

解決思路:想要讓主幹分支保持 linear 線性的歷史,我們不妨看看 GitHub 提供的集成策略,Merge Button 不要選擇 “Allow merge commits”,而應該選擇 “Allow squash merging” 或者 “Allow rebase merging”。除此之外,大家還可以注意一下 GitLab 的 Merge method,看看 “Fast-forward merge ” 是否也能幫我們創建 linear 的歷史。

視頻詳解:團隊協作時如何做多分支的集成?

5、基於主幹分支做 rebase 的時候,怎麼省掉處理文件衝突的重複性的工作?

使用場景:某個時間點從主幹分支創建出了特性分支,當這條特性分支想合回主幹分支的時候,主幹分支已經向前新增了 commit。爲了讓特性分支順利合回主幹,開發人員通常在開發本地,把自己維護的特性分支基於主幹分支做 rebase。如果特性分支有多個 commit 需要做 rebase,有時候要求開發人員反覆解決相同的文件衝突,這些活幹起來不僅麻煩還沒有什麼價值。

解決思路: 我們可以藉助 Rerere 這個Git工具,Rerere 是指“reuse recorded resolution” ,它允許我們讓 Git 記住解決一個塊衝突的方法,這樣在下一次遇到相同衝突時,Git 可以爲我們自動地解決它。

視頻詳解:團隊協作時如何做多分支的集成?

作者寄語:

學好 Git、GitHub 和 GitLab 三劍客,彷彿乘上了安全且高速的列車,可以讓團隊更高效地完成研發任務,也可以讓個人更順利地參與協作,何樂而不爲呢?

我在這門課裏,不光講簡單的 Git 命令使用,還會講更多 Git 原理性方面的內容,以及 GitHub 和 GitLab。知其然更知其所以然,怎麼用這些做代碼 review ,做項目管理,怎麼去做持續集成,這些都是更高維度的東西,而不僅僅是去學幾個工具。

點擊試看或訂閱《玩轉 Git 三劍客》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章