Git 提交竟然還能這么用?
之前已經(jīng)給大家分享過 Git / GitHub 的學習指南,感興趣的同學可以先看視頻了解:https://www.bilibili.com/video/BV1KZ4y1e7cG。
這篇文章,主要是給大家分享 Git 的核心功能 提交
(Commit)的作用,幫助大家更好地利用 Git 這一工具來提高自己的開發(fā)工作效率。
什么是 Git 提交?
Git 提交是指將你的代碼保存到 Git 本地存儲庫,就像用 Word 寫長篇論文時進行保存文件一樣。每次 Git 提交時都會創(chuàng)建一個唯一的版本,除了記錄本次新增或發(fā)生修改的代碼外,還可以包含提交信息,來概括自己這次提交的改動內(nèi)容。
如下圖,就是一次 Git 提交:

Git 提交的作用
Git 提交有很多作用,我將它分為 基礎(chǔ)用法 和 其他妙用 。
基本作用
歷史記錄
Git 提交最基本的作用就是維護項目的歷史記錄。每次提交都會記錄代碼庫的狀態(tài),包括文件的添加、修改和刪除;還包括一些提交信息,比如提交時間、描述等。這使得我們可以通過查看所有的歷史提交來追溯項目的開發(fā)進度和歷程,了解每個提交中都發(fā)生了什么變化。
比如查看我們編程導航文檔網(wǎng)站項目的提交記錄,能看到我是怎么一步一步構(gòu)建出這個文檔網(wǎng)站的:
開源地址:https://github.com/liyupi/code-xingqiu

在企業(yè)開發(fā)中,如果一個人寫了 Bug,還死不承認,那么就可以搬出 Git 提交記錄,每一行代碼是誰提交的都能很快地查出來,謹防甩鍋!
版本控制
另一個 Git 提交的基本作用是版本控制。每個提交都代表了代碼庫的一個版本,這意味著開發(fā)者可以隨時切換代碼版本進行開發(fā),恢復舊版本的代碼、或者撤銷某次提交的代碼改動。
推薦新手使用可視化工具而不是 Git 命令進行版本的切換和撤銷提交,在不了解 Git 工作機制的情況下使用命令操作很容易出現(xiàn)問題。
如下圖,在 JetBrains 系列開發(fā)工具中,右鍵某個提交,就可以切換版本或撤銷提交了:

代碼對比
你可以輕松地查看兩個提交之間的所有代碼更改,便于快速了解哪些部分發(fā)生了變化。這對于解決代碼沖突、查找錯誤或?qū)彶榇a非常有幫助。
在 JetBrains 系列開發(fā)工具中,只需要選中 2 個提交,然后點右鍵,選擇 Compare Versions
就能實現(xiàn)代碼對比了:

改動了哪些代碼一目了然:

一般情況下,如果我們因為某次代碼改動導致項目出現(xiàn)了新的 Bug。通過這種方式對比本次改動的所有代碼,很快就能發(fā)現(xiàn) Bug 出現(xiàn)的原因了。
其他妙用
除了基本作用外,Git 提交還有一些妙用~
記錄信息
像上面提到的,Git 提交不僅能用于記錄代碼更改,我們還可以在提交信息中包含有關(guān)這次更改的重要信息。比如本次改動代碼的介紹、代碼更改的原因、相關(guān)的任務(wù)(需求單)或功能等??梢院唵卫斫鉃榻o本次工作寫總結(jié)和描述。
如果提交信息編寫得非常清晰完善,那么項目的團隊成員可以更容易地理解每個提交,甚至能做到 “提交即文檔”,提高協(xié)作和項目維護效率。
正因如此,很多團隊會定制自己的提交信息規(guī)范,比如之前我在鵝廠的時候,每次提交都建議帶上需求單的地址,便于了解這次提交是為了完成什么需求。
這里給大家推薦一種很常用的提交信息規(guī)范 —— 約定式提交,每次提交信息都需要遵循以下的結(jié)構(gòu):
《約定式提交》文檔:https://www.conventionalcommits.org/zh-hans/v1.0.0/
<類型>[可選 范圍]: <描述>
[可選 正文]
[可選 腳注]

當然,這種方式有利有弊,可能有同學會覺得 “我注釋都懶得寫,你還讓我寫提交信息?” 這取決于你們項目的規(guī)模和緊急程度等因素,反正團隊內(nèi)部保持一致就好。
像我在用 Git 開發(fā)個人項目時,也不是每次都寫很詳細的提交信息的。但是帶 編程導航 的同學從 0 開發(fā)項目時,每場直播寫的代碼都會單獨作為一次提交,如下圖:

是不是很清晰呢?這樣做的好處是,大家想獲取某場直播對應(yīng)的中間代碼(而不是最終的成品代碼)時,只需要點擊某次提交記錄就可以獲取到了,很方便。

如果你的提交信息寫得非常標準、統(tǒng)一結(jié)構(gòu),那么甚至還可以用程序自動讀取所有的提交信息,生成日志、或者輸出提交報告。
自動化構(gòu)建部署
大廠研發(fā)流程中,一般都是使用 CI / CD(持續(xù)集成和持續(xù)部署)平臺,以流水線的形式自動構(gòu)建部署項目的。
Git 提交可以和 CI / CD 平臺進行集成,比如自動監(jiān)視代碼庫中的提交,并在每次提交后自動觸發(fā)構(gòu)建和部署任務(wù)。一個典型的使用場景是,每次代碼開發(fā)完成后,先提交代碼到測試分支,然后 CI / CD 平臺監(jiān)測到本次提交,并立即在測試環(huán)境中構(gòu)建和部署,而不需要人工操作,從而提交效率。
GitHub Actions 和 GitHub Webhooks 都可以實現(xiàn)上述功能,感興趣的同學可以嘗試下。
GitHub Actions 文檔教程:https://docs.github.com/zh/actions/quickstart

檢驗項目真假
最后這個點就比較獨特了,那就是面試官可以通過查看 Git 的提交記錄來判斷你的項目真假、是不是自己做的。
比如我收到一些同學的簡歷中,有的開源項目看起來感覺很厲害,但是點進倉庫看了下提交記錄,發(fā)現(xiàn)寥寥無幾,甚至有的只有 1 次!像下圖這樣:

那么這個項目真的是他自己從 0 開始做的么?答案就顯而易見了。
如果真的是你自己用心做的項目,提交記錄絕對不止 1 次,而且面試官能夠通過提交記錄很清晰地了解到你的項目開發(fā)周期。
像我的 yuindex Web 終端項目一樣,這才是比較真實、有說服力的:

其他人也能從你的提交記錄中,感受到你對項目的用心程度。
講到這里,是不是有些同學恍然大悟,知道為啥自己的項目明明開源了,但是沒有收到面試邀請、或者被面試官覺得項目不真實了?
實踐
以上就是本次分享,Git 提交的實踐其實非常簡單,我建議大家每次做新項目時,無論大小,都用 Git 來托管你的項目,并且每開發(fā)完一個功能或解決 Bug,都進行一次提交。等項目完成后回過頭來看這些提交記錄,都是自己寶貴的財富。