Git 合併提交



Git 合併提交 是一種 Git 技術,它將多個提交合併成一個統一的提交。

透過將多個連續的提交合併到單個基礎提交中,此過程簡化了提交歷史記錄,並使專案歷史記錄更易於閱讀和理解。

  • Git 合併提交通常與互動式變基一起使用,開發人員可以選擇要合併哪些貢獻。它不是一個獨立的工具。

  • 使用此技術,可以確保具有大量增量提交的功能分支僅顯示經過完善的合併提交。

  • 在提交拉取請求之前合併提交,透過保持歷史記錄更有條理和清晰,有助於改進審查和協作。

使用以下命令來保持倉庫結構化並將多個更改合併到一箇中

git merge --squash bugfix-issue-123

此方法在當前分支上建立一個單個提交,其中包含來自 bugfix-issue-123 的所有提交。

Git 中的合併提交

透過將多個貢獻合併到單個提交中,藉助git 合併提交可以清理和組織 Git 歷史記錄。

  • 合併提交主要關注將相關的提交合併到單個內聚提交中,這與可能涉及多個更改的普通合併不同。

  • 這對於組織專案歷史記錄並使提交更容易理解非常有幫助。

何時合併提交

以下幾點將幫助我們決定何時合併提交

  • 合併功能分支:在將功能分支合併到主分支之前,可以將其多個提交壓縮成一個提交。

    此過程有助於為我們的專案提供一套整合且易於理解的歷史發展。

  • 準備拉取請求:在提交拉取請求 (PR) 之前,合併提交可以確保只包含最重要的更改。

    因此,審閱者將更容易理解調整的目標和範圍。

  • 清理提交歷史:將多個小的或增量的提交合併成較少的、較大的提交可以使提交歷史記錄更易於閱讀和導航。

如何合併提交?

Git 提供了幾種將多個提交合併到一箇中的方法

  • 在 Git 合併期間合併提交。

  • 使用互動式 Git 變基合併提交。

  • 透過拉取請求合併提交。

  • 使用 Git reset 合併提交。

在 Git 合併期間合併提交

一種簡單的方法是使用帶有--squash標誌的git merge將功能分支中的多個提交合併到當前分支上的單個提交中。

此方法有助於保持清晰易懂的提交歷史記錄。

使用 git merge 合併提交的步驟

檢出目標分支:切換到要整合更改的分支

git checkout <target_branch>

合併並壓縮:使用以下命令將源分支的提交壓縮到單個提交中:

git merge --squash <source_branch>

這無需實際合併提交或修改 HEAD,即可準備進行單個提交的修改。

解決衝突:如果出現衝突,請在工作目錄中手動解決。

提交壓縮的更改:建立一個帶有訊息的單個提交

git commit -m "<your_commit_message>"

推送更改:將更改推送到遠端倉庫。

為確保不會覆蓋其他人的更改,請使用--force-with-lease

git push --force-with-lease

使用互動式 Git 變基合併提交

使用互動式變基合併提交的步驟

檢出分支:切換到包含要壓縮的提交的分支

git checkout <branch_name>

確定提交數量:檢視提交歷史記錄並計算分支上的提交數量

git log --graph --oneline --all

啟動互動式變基:應該為適當數量的提交啟動互動式變基。

將 <number_of_commits> 替換為上一步中的計數。例如,要壓縮最後兩個提交

git rebase -i HEAD~2

選擇變基操作:在開啟的文字編輯器中,我們將看到一個提交列表。

可以使用一個操作 (pick、squash 等) 來指示每個提交。

要壓縮提交,請將要與它們上方的提交合並的提交的pick更改為squash

儲存並退出:儲存編輯,然後關閉文字編輯器。Git 將根據我們的指示執行變基。

編輯提交訊息:我們將能夠使用不同的文字編輯器為壓縮的提交編寫提交訊息。

我們可以更改預先編寫的訊息或編寫全新的訊息。完成後,儲存並關閉。

推送更改:變基完成後,將更新的檔案推送到遠端倉庫。

使用--force-with-lease可防止覆蓋其他人的更改

git push --force-with-lease

透過 GitHub 上的拉取請求合併提交

在 GitHub 等平臺上生成拉取請求時,有一種簡單的方法可以合併提交。

藉助此功能,使用者可以透過在合併過程中將多個提交合併到單個提交中來維護清晰的提交歷史記錄。

使用拉取請求合併提交的步驟

  • 導航到 GitHub:開啟網路瀏覽器並轉到 GitHub。

  • 登入:登入 GitHub 帳戶並找到倉庫。

  • 建立拉取請求:轉到倉庫中的拉取請求選項卡。點選新建拉取請求按鈕。

  • 選擇壓縮併合並:在拉取請求準備就緒後,點選建立合併提交下拉選單,然後選擇壓縮併合並

  • 新增評論:為壓縮的提交編寫評論,然後點選相應的按鈕完成合並過程。

使用 git reset 合併提交

使用 git reset 合併提交的步驟

使用軟重置:執行軟重置以將 HEAD 移動到我們想要壓縮的提交之前的狀態。

這不會更改索引或工作目錄,從而保持更改不變。

要壓縮給定數量的提交,請執行以下命令

git reset --soft HEAD~<number_of_commits> && git commit

將我們想要壓縮的提交數量放在 <number_of_commits> 的位置。

建立新的提交:git reset --soft命令將分支恢復到指定提交的狀態,同時保留暫存區中的所有更改。

當我們執行git commit時,預設文字編輯器將開啟,其中包含來自壓縮提交的合併提交訊息。

我們可以編輯或新增新的提交訊息以用於單個合併提交。

儲存並退出編輯器以完成此過程。

合併提交的優點

以下是合併提交的優點

  • 簡化程式碼審查:一次檢查一個大型提交比排序多個較小的提交花費的時間更少。這使得審閱者更容易一次看到所有更改。

  • 減少倉庫混亂:當多個提交合併成一個時,提交歷史記錄將包含較少的條目,這將最大限度地減少混亂並使其看起來更清晰。

  • 簡化回滾:回滾單個提交通常比回滾多個較小的提交更容易管理更改。

  • 簡化合並:減少提交歷史記錄會導致更少的合併衝突。在分支合併之前反轉提交可以簡化整合過程。

廣告