使用擷取、合併和提取更新程序代碼
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 |Visual Studio 2022
當專案有數個參與者時,下載並整合其他人上傳至專案遠端存放庫的工作,以保持本機 Git 存放庫更新。 這些 Git 命令會更新本機存放庫:
- Git 擷取 會下載其他人上傳至遠端存放庫的任何新認可。 本機存放庫快取中的遠端追蹤分支會更新—本機分支保持不變。
- Git 合併 會將一或多個來源分支的認可整合到目標分支中。
- Git rebase 會將來源分支的認可整合到目標分支中,但使用與 Git 合併不同的策略。
- Git 提取 會執行擷取,然後執行合併或重新基底,以將擷取的認可整合到您目前的本機分支。
當您將本機存放庫與遠端存放庫同步處理時,Visual Studio 會使用這些 Git 命令的子集。
如需 Git 工作流程的概觀,請參閱 Azure Repos Git 教學課程。
本文提供下列工作的程式:
- 使用 fetch 下載變更
- 使用 合併 或 重新基底更新分支
- 使用 提取下載變更和更新分支
使用 fetch 下載變更
Git 擷取會下載本機存放庫中不存在的遠端分支認可和參考的檔案物件,並更新 本機存放庫快取中的遠端追蹤 分支。 遠程追蹤分支是本機快取遠端分支的唯讀複本,不是您的本機分支。 Git 擷取不會更新本機分支。 例如,如果所 origin
指定的遠端存放庫具有 bugfix3
分支,Git 擷取將會更新名為 origin/bugfix3
的遠端追蹤分支,而不是您的本機 bugfix3
分支。 您可以使用遠端追蹤分支來:
- 比較遠端追蹤分支與本機分支,以檢閱擷取的變更。
- 將遠端追蹤分支合併至本機分支。
- 從遠端追蹤分支建立新的本機分支。
Visual Studio 2022 提供 Git 版本控制體驗,方法是使用 Git 功能表、Git 變更,以及透過 方案總管 中的操作功能表。 Visual Studio 2019 16.8 版也提供 Team Explorer Git 使用者介面。 如需詳細資訊,請參閱 Visual Studio 2019 - Team Explorer 索引標籤。
在 [ Git 變更] 視窗中,選擇 [ 擷取]。 然後選取 [傳出/傳入 ] 以開啟 [Git 存放庫 ] 視窗。
您也可以從 Git 功能表選擇 [ 擷取 ]。
在 [ Git 存放庫 ] 視窗中,擷取的認可會出現在 [傳入 ] 區段中。 選取擷取的認可,以查看該認可中已變更的檔案清單。 選取已變更的檔案,以查看已變更內容的差異檢視。
提示
擷取 不會刪除本機存放庫快取中不再有遠端對應專案遠端追蹤分支。 若要設定 Visual Studio 在 Fetch 期間修剪過時的遠端追蹤分支:
- 選取 [工具>選項>] 原始檔控制>Git 全域 設定。
- 將擷 取 期間修剪遠端分支選項設定為
True
。
在 Git 擷取之後,您可以比較本機分支與其對應的遠端追蹤分支,以查看遠端分支上的變更。 如果您決定使用擷取的變更來更新目前的本機分支,您可以執行 Git 合併 或 重新基底。 或者,您可以執行 Git 提取,其結合了 Git 擷取與 Git 合併或重新基底。 Git 合併和 Git 重新基底會藉由將來源分支的認可套用至目標分支,以更新目標分支。 不過,Git 合併和 Git 重新基底會使用不同的策略。 如需詳細資訊,請參閱使用合併或重新基底更新分支和重新基底與合併的時機。
使用合併或重新基底更新分支
Git 合併和 Git 重新基底會將來源分支的認可整合到您目前的本機分支(目標分支)。 Git 合併 會 執行快速轉寄 或 無快速向前 合併。 無快速向前合併也稱為 三向 合併或 true 合併。 Git rebase 是另一種合併類型。 下圖顯示這些合併類型。
Git 合併和 Git rebase 在 Git 工作流程中廣泛使用。 在處理本機功能或 Bugfix 分支時,常見的作法是:
- 定期提取以擷取和合併遠端認可,讓您的本機
main
分支保持其遠端對應專案的最新狀態。 - 使用重新基底或合併,將本機
main
分支更新整合到您的本機功能分支。 - 將 工作推送 至對應的遠端分支,以備份您在本機功能分支上的工作。
- 在功能完成時,建立 提取要求 ,將您的遠端功能分支合併至遠端
main
分支。
此方法可協助您:
- 請留意其他可能會影響您工作的最新工作。
- 立即解決您的工作與其他人之間的任何衝突。
- 在最新的項目內容上套用您的新功能。
- 取得工作的提取要求檢閱。
合併
針對 Git 合併,如果目標分支的提示存在於來源分支內,預設合併類型將會是快速向前合併。 否則,預設合併類型會是無快速向前合併。
如果目標分支的提示與來源分支不同,則快速轉寄 Git 合併永遠無法發生合併衝突,因為 Git 不會套用快速轉送合併。 根據預設,Git 會盡可能使用快速轉寄合併。 例如,Git 會在本機分支上套用快速轉送合併,而您只藉由從遠端對應分支提取來進行更新。
No-fast-forward Git 合併會產生新的目標分支「合併認可」,以整合來源分支變更與目標分支變更。 適用的變更是在兩個分支通用的最後一次認可之後進行的變更。 在上圖中,認可 C 是兩個分支中最後一個常見的認可。 如果任何來源分支變更與任何目標分支變更衝突,則 Git 會提示您解決合併衝突。 合併認可 (L) 包含整合式來源分支和目標分支變更。 來源和目標分支秘訣 (K 和 E) 是合併認可的父代。 在分支的認可歷程記錄中,合併認可是合併作業的實用標記,並清楚地顯示哪些分支已合併。
Git 合併只會修改目標分支,來源分支會維持不變。 當您遇到一或多個合併衝突時,您必須加以解決,才能完成合併。 或者,您可以取消合併作業,並將目標分支傳回其先前的狀態。
如需合併選項和策略的詳細資訊,請參閱 Git 參考手冊 和 Git 合併策略。
提示
如果來源分支是遠程追蹤分支,請在合併之前執行 Git 擷取 ,以確保分支是最新的。
從功能表列選擇 [Git > 管理分支 ],以開啟 [Git 存放庫 ] 視窗。
在 [ Git 存放庫 ] 視窗中,以滑鼠右鍵按兩下目標分支,然後選取[ 簽出]。
以滑鼠右鍵按兩下來源分支,然後選取 [將source-branch合併<至 <target-branch>>]。
Visual Studio 會在成功合併之後顯示確認訊息。
如果合併因合併衝突而停止合併,Visual Studio 會通知您。 您可以 解決衝突,或取消合併並返回合併前狀態。
Rebase
Git rebase 會重新設定目標分支的認可歷程記錄,使其包含所有來源分支認可,後面接著自上次一般認可之後的所有目標分支認可。 另一個檢視方法是 Git 重新基底會在來源分支歷程記錄上方重新執行目標分支中的變更。 如果任何來源分支變更與任何目標分支變更衝突,則 Git 會提示您解決合併衝突。 Git rebase 不會建立合併認可。 值得注意的是,Git 重新基底會變更現有目標分支認可的順序,這不是其他合併策略的情況。 在上 圖中,commit K' 包含與 K 相同的變更,但有新的認可標識碼,因為它會連結回認可 E,而不是 C。
Git 重新基底只會修改目標分支,來源分支會維持不變。 當您遇到一或多個合併衝突時,您必須加以解決,才能完成重新基底。 或者,您可以取消重新基底作業,並將目標分支傳回其先前的狀態。
如果您是處理功能或 Bugfix 分支的唯一人員,請考慮使用 Git rebase 將新的 main
分支認可整合到其中。 否則,請使用 Git 合併。 如需 Git rebase 的詳細資訊,以及使用時機,請參閱使用 Rebase 和 Rebase 與 merge 套用變更。
提示
如果來源分支是遠程追蹤分支,請在重新基底之前執行 Git 擷取 ,以確保分支是最新的。
選擇 [Git > 管理分支 ] 以開啟 [Git 存放庫 ] 視窗。
在 [ Git 存放庫 ] 視窗中,以滑鼠右鍵按兩下目標分支,然後選取[ 簽出]。
以滑鼠右鍵按兩下來源分支,然後選取 [將目標分支重新設定<為<source-branch>>]。
Visual Studio 會在成功重新基底之後顯示確認訊息。
如果因合併衝突而停止重新基底,Visual Studio 會通知您。 您可以 解決衝突,或取消重新基底並返回預先重新基底狀態。
使用提取下載變更和更新分支
根據預設,Git 提取會結合 Git 擷取 和 Git 合併 ,以從其遠端對應專案更新您目前的本機分支。 或者,Git 提取可以執行 Git rebase ,而不是 Git 合併。
與 Git 擷取不同,Git 提取會在從遠端存放庫下載新認可之後立即更新您目前的本機分支。 當您知道想要在 Git 擷取之後立即更新目前本機分支時,請使用 Git 提取。
提示
若要在提取時將 Visual Studio 設定為重新基底,而不是合併:
- 從 Git 功能表中,移至 [工具>選項>] 原始檔控制>Git 全域 設定。
- 將 選擇 選擇選項時的 Rebase 本機分支設定為
True
。
在 [ Git 變更] 視窗中,選擇 [ 提取]。
您也可以從 Git 功能表選擇 [ 提取 ]。
提取作業完成時,會顯示確認訊息。
如果在提取作業的合併部分期間發生衝突,Visual Studio 會通知您。 您可以 解決衝突,或取消合併並返回合併前狀態。
注意
在 Visual Studio 中,Sync 會執行提取,然後執行推送以同步處理本機和遠端分支。 如需同步處理的詳細資訊,請參閱在Visual Studio中使用 Git提取、提取、推送和同步處理版本控制。