使用重訂基底來套用變更

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 |Visual Studio 2022

Git 會自動藉由將每個新認可連結到其前置專案,在分支維護開發歷程記錄 當您 將一個分支合併 到另一個分支時,歷程記錄可能會變得不那麼簡單。 例如, 不快速向前合併 會藉由建立與多個前置專案的合併認可,來合併開發各行。 相反地,Git 重新基底 會結合不同的開發行,而不建立合併認可,這會導致較簡單的認可歷程記錄,但遺失合併的相關信息。 您所選擇的 合併類型 可能會受到您要保留合併記錄或簡化認可歷程記錄的影響。

本文討論何時使用 rebase 而非無快速向前合併,並提供下列工作的程式:

  • 重新設定本機分支的基底
  • 在重新基底之後強制推送本機分支
  • 互動式重新基底來壓縮本機認可

如需 Git 工作流程的概觀,請參閱 Azure Repos Git 教學課程

重新設定本機分支的基底

Git 重新基底 會將來源分支的認可整合到您目前的本機分支(目標分支)。 來源分支保持不變。 如需比較,Git rebase 和其他合併類型會顯示在下圖中。

顯示使用 Git rebase 時認可前後的圖表。

Git rebase 會重新設定目標分支的認可歷程記錄,使其包含所有來源分支認可,後面接著自上次一般認可之後的所有目標分支認可。 另一個檢視方法是,重新基底會在來源分支歷程記錄上方重新執行目標分支中的變更。 值得注意的是,Git 重新基底會變更現有目標分支認可的順序,這不是其他合併策略的情況。 在上圖中,commit K' 包含與 K 相同的變更,但有新的認可標識碼,因為它會連結回認可 E,而不是 C。

在重新基底期間,如果來源分支變更與目標分支變更衝突,Git 會提示您 解決合併衝突。 您可以使用在合併期間解決合併衝突的相同方式,在重新基底期間解決合併衝突。

Rebase 與 no-fast-forward 合併

Git 重新處理會產生較簡單但較不精確的認可歷程記錄 ,而不是非快速向前 合併,否則稱為 三向真實 合併。 當您想要在認可歷程記錄中記錄合併時,請使用無快速向前合併。

如果您是處理功能或 Bugfix 分支的唯一人員,請考慮使用 rebase 定期將最近的 main 分支工作整合到其中。 該策略有助於確保您隨時瞭解其他人最近的工作,並及時解決任何出現的合併衝突。 藉由重新設定,您會在最新的 main 分支工作之上實作新功能,以協助維護線性認可歷程記錄。

如需 Git Rebase 和使用時機的詳細資訊,請參閱 Rebase 與 merge

Rebase 和 force-push 指導方針

如果您重新建置先前 推送的本機分支,然後再次執行預設 Git 推送命令,推送將會失敗。 默認 Git push 命令會套用快速轉送合併,以將本機分支整合到遠端分支。 該命令會在重新基底之後失敗,因為重新基底會改變本機目標分支中現有認可的順序,因此它不再符合其遠端對應專案的歷程記錄。 在此案例中, 強制推送 將會成功,方法是覆寫遠端分支。

Git 重設基底和強制推送是功能強大的工具,但在決定是否使用時,請記住這些指導方針:

  • 除非您確定沒有人使用共用分支,否則請勿重新建置已推送並與他人共用的本機分支。 重新基底之後,您的本機分支將不再符合其遠端對應項目的歷程記錄。
  • 請勿強制推送至其他人正在使用的遠端分支,因為其遠端分支的本機版本將不再符合更新的遠端分支歷程記錄。
  • 您的小組應同意重新基底和強制推送的使用案例。

提示

若要進行共同作業檢閱程式,請使用 提取要求 ,將新工作合併至遠端存放庫的預設分支。

如何重新基底

Visual Studio 2022 提供 Git 版本控制體驗,方法是使用 Git 功能表、Git 變更,以及透過 方案總管 中的操作功能表。 Visual Studio 2019 16.8 版也提供 Team Explorer Git 使用者介面。 如需詳細資訊,請參閱 Visual Studio 2019 - Team Explorer 索引標籤。

  1. 選擇 [Git > 管理分支 ] 以開啟 [Git 存放庫 ] 視窗。

    Visual Studio Git 功能表中 [管理分支] 選項的螢幕快照。

  2. 在 [ Git 存放庫 ] 視窗中,以滑鼠右鍵按兩下目標分支,然後選取[ 簽出]。

    Visual Studio [Git 存放庫] 視窗中分支操作功能表中 [簽出] 選項的螢幕快照。

  3. 以滑鼠右鍵按兩下來源分支,然後選取 [將目標分支重新設定<為<source-branch>>]。

    Visual Studio [Git 存放庫] 視窗中分支操作功能表中 [Rebase] 選項的螢幕快照。

  4. Visual Studio 會在成功重新基底之後顯示確認訊息。

    Visual Studio [Git 存放庫] 視窗中重新建置確認訊息的螢幕快照。

    如果因合併衝突而停止重新基底,Visual Studio 會通知您。 您可以 解決衝突,或取消重新基底並返回預先重新基底狀態。

    Visual Studio [Git 存放庫] 視窗中重新建置衝突訊息的螢幕快照。

在重新基底之後強制推送本機分支

如果您重新建置先前推送的本機分支,後續的預設 Git 推送將會 失敗。 相反地,您可以強制推送本機分支來覆寫其遠端對應專案,使其認可歷程記錄相符。

警告

永遠不要強制推送其他人正在處理的分支。 如需詳細資訊,請參閱 重新基底和強制推送指導方針

若要強制在 Visual Studio 中推送,您必須先啟用強制推送選項:

  1. 移至 [工具>選項>] 原始檔控制>Git 全域 設定。

  2. 選取 [ 啟用 push --force-with-lease ] 選項。

Git 推送 --force-with-lease 旗標比 --force 旗標更安全,因為它不會覆寫遠端分支,其認可未整合到您強制推送的本機分支內。

  1. 在 [ Git 變更 ] 視窗中,選取按鈕以推送認可。

    Visual Studio [Git 變更] 視窗中向上鍵按鈕的螢幕快照。

    或者,您可以從 Git 功能表選取 [推送]。

    Visual Studio 中 Git 功能表中 [推送] 選項的螢幕快照。

  2. 如果預設的 Git 推送作業失敗,Visual Studio 會 啟動 Git-Push 失敗 對話方塊。 選擇 [ 強制推送]。

    Visual Studio 中 Git 推送失敗對話框的螢幕快照。

  3. Visual Studio 會在成功推送之後顯示確認訊息。

    Visual Studio 中推送確認訊息的螢幕快照。

互動式重新基底來壓縮本機認可

一般而言,當您在本機功能分支中處理新功能時,您將建立多個認可。 當您準備好發佈新功能時,您可能會想要將這些認可合併成單一認可,以簡化認可歷程記錄。 您可以使用互動式重新基底,將 多個認可壓縮 成單一認可。

Visual Studio 2022 不支援互動式重新配置。 請改用 Git 命令行。

注意

Azure DevOps 用戶可以 壓縮合併 ,以壓縮提取要求期間主題分支的認可歷程記錄。

下一步