我每天都使用 Git,過去我曾寫過一篇 Git 指南 和一份 Git Cheat Sheet。
我自認為是一名 Git 的愛好者,但……我不是一個 Git 專家。
提交、抓取遠程庫、拉取遠程庫、推送到遠程庫……這是我每天使用 Git 的日常事務。
儘管如此,我還是會用一些 Git 的進階功能:
Git 能做的進階操作讓我感到驚訝。它可以非常複雜,但我傾向於避免複雜的操作。我幾乎從不使用命令行工具進行 Git 操作,而是使用 GitHub Desktop,這是迄今為止最簡單和最好用的 Git 客戶端。
然而,有兩個功能我有時會使用,分別是 cherry-picking 和合併提交記錄。
讓我們來談談這兩個功能。
在只有我一個開發者的項目中(也就是所有我個人的項目),我往往傾向於直接在主分支(master)上進行工作。例如,如果我只是進行一個簡單的更改,或者向博客添加一篇新文章。這些都是快速且不會破壞原有功能的工作。
但在某些情況下,我並不使用這種方式,而是為一個大的功能創建一個分支。
這在團隊或者開源項目中也是默認的方式。
你創建一個分支,並且經常提交。早期和頻繁地提交有很大的優勢,因為你可以有信心地在代碼上進行工作,知道你總能回到一個正常的狀態,或者至少回到你知道某些東西是正常的之前的狀態。
你可能會進行一系列快速的提交,其中的提交信息可能是“ok”,“試驗這個”,或者“修復愚蠢的錯誤”。
但是在某個時候,你需要收斂到一個穩定的狀態,將更改提交回主分支(master)或任何你想合併的分支。
在那之前,你需要做一件事情:合併(squashing)你的提交記錄。
在 Github 中,當你合併一個 Pull Request 時,它可以自動為你合併提交記錄。這是我過去在公開的開源項目中使用得非常多的工作流程。你只會看到一個提交,而不是在 Pull Request 中包含的所有獨立提交。在 PR 合併過程中,你可以編寫詳細的提交訊息和說明。
這將消除所有與你要合併的分支的頭部(head)不一致的前一個 Git 提交記錄,也將刪除那些可能撤消更改的提交記錄等等。
這就是 Github PR 流程中的合併(squashing)。你也可以在 Github 之外進行合併(squashing)。
一旦你在一個分支上的工作完成,你將 master(或任何你想要合併的分支)合併進來:
git merge master
這樣你可以解決任何更新衝突。
然後你切換到 master 分支,並運行以下命令:
git merge --squash <你的功能分支>
然後執行
git commit
這只是你可以使用的一種可能的工作流程,使用 Github 上的全部功能非常簡單,並且可以減少最多的麻煩。