Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022
Visual Studio 2019 |Visual Studio 2022
當您想要復原 Git 存放庫中的變更時,請先決定您要復原的變更類型。 例如,您可能要:
- 將檔案還原為最後一個認可的版本,以捨棄檔案的未認可變更。 您也可以將檔案還原為任何認可的版本。
- 將分支重設為之前的提交,以還原為先前的狀態。
- 建立一個新的提交來還原共享提交所做的變更。 由於此方法不會重寫現有的提交歷程記錄,因此適合用來還原已經推送且正在供其他人使用的提交所做的變更。
- 修改您的最後一次提交,以更改其內容或訊息。 如需詳細資訊,請參閱 如何更新上次提交。
- 藉由建立新的 提交 來修正先前提交引入的問題。 如需詳細資訊,請參閱 如何建立提交。
在本文中,您將了解如何:
- 丟棄檔案的未提交變更
- 將分支還原為先前的狀態
- 復原共享認可所做的變更
先決條件
| 類別 |
需求 |
| 專案存取 |
專案的成員。 |
| 許可 |
- 檢視私人專案中的程式碼:至少具有 基本 存取權。 - 複製或貢獻於私人專案中的程式碼:貢獻者安全群組成員或專案中相應權限。 - 設定分支或儲存庫權限: 管理權限 是分支或儲存庫的權限。 - 更改預設分支: 編輯政策 是儲存庫的權限。 - 匯入存放庫: 專案系統管理員安全性 群組的成員或 Git 專案層級 建立存放庫 許可權設定為 [允許]。 如需詳細資訊,請參閱 設定 Git 存放庫許可權。 |
| Services |
已啟用 Repos。 |
| 工具 |
選擇性。 使用 az repos 指令:Azure DevOps CLI。 |
注意
在公用專案中,具有 專案關係人 存取權的使用者具有 Azure Repos 的完整存取權,包括檢視、複製和參與程式代碼。
| 類別 |
需求 |
| 專案存取 |
專案的成員。 |
| 許可 |
- 查看代碼:至少基本訪問權限。 - 複製或參與程式碼: 參與者安全性群組 的成員或專案中的對應許可權。 |
| Services |
已啟用 Repos。 |
捨棄檔案的未提交變更
如果您已對檔案進行變更,但尚未認可這些變更,您可以使用 Git 簽出 來快速捨棄變更,並將檔案還原為其最後認可版本。
當您指定認可標識符時,Git checkout 也可以將檔案還原為任何認可的版本。
警告
如果你可能會想重新套用 Git checkout 會捨棄的變更,請考慮將這些變更暫存。
Visual Studio 2022 提供 Git 版本控制體驗,方法是使用 Git 功能表、Git 變更,以及透過 方案總管 中的操作功能表。 Visual Studio 2019 16.8 版也提供 Team Explorer Git 使用者介面。 如需詳細資訊,請參閱 Visual Studio 2019 - Team Explorer 索引標籤。
Visual Studio 支持藉由將檔案還原為其最後認可版本來捨棄檔案的未認可變更。
在 [ Git 變更 ] 視窗中,使用您想要捨棄的變更來識別檔案。 如果檔案位於 [ 分段變更 ] 區段中,請以滑鼠右鍵按兩下它,然後選擇 [Unstage]。 未標記的檔案會顯示在 [變更 ] 區段中。
如果檔案位於 [變更 ] 區段中,請以滑鼠右鍵按兩下它,然後選擇 [復原變更 ] 以捨棄檔案自上次認可后的所有變更。
Visual Studio 支持藉由將檔案還原為其最後認可版本來捨棄檔案的未認可變更。
在 Team Explorer 的 [變更] 檢視中,使用您想要捨棄的變更來識別檔案。 如果檔案位於 [ 分段變更 ] 區段中,請以滑鼠右鍵按兩下它,然後選擇 [Unstage]。 未暫存的檔案會顯示在 變更 區段中。
如果檔案位於 [變更 ] 區段中,請以滑鼠右鍵按兩下它,然後選擇 [復原變更 ] 以捨棄檔案自上次認可后的所有變更。
您可以使用 Git checkout 命令,將檔案還原為其最後一個認可版本,以捨棄檔案的未認可變更:
git checkout <file>
例如,git checkout README.md 捨棄 README.md 檔案中尚未提交的變更。
當您指定能唯一標識一次提交的部分或完整提交 ID 時,Git checkout 也支援將檔案還原為先前提交的版本:
git checkout <commit ID> <file>
如需尋找認可標識碼的詳細資訊,請參閱 尋找認可標識符。
注意
使用 Git checkout 命令來還原檔案與一般用途不同,也就是在分支之間切換。
checkout命令輸出會告訴您它是正在切換分支還是在更新檔案,並在您無法清楚識別想執行的動作時給出警告。
將分支還原為先前的狀態
您可以使用 Git 重設 將分支重設為先前的提交,以還原為先前的狀態。 Git reset 會影響所有分支資料夾中的所有檔案。
Git reset 有幾個選項。 預設選項是將分支還原到先前的提交,但將所有後續的變更保留為未提交的更改。 另一個選項是將分支點還原為先前的提交點,這樣會捨棄或移除自該提交點以來所有分支檔案的變更。
警告
如果上次認可已推送並與他人共用,請勿將分支重設為上次認可之前的認可。 這樣做會導致您的本機分支歷程記錄不再符合遠端分支歷程記錄。 如需共享分支,請參閱 復原由共享提交所做的變更。
從功能表欄中,選擇 [Git > 檢視分支歷程記錄 ] 以開啟 最新分支的 [歷程記錄 ] 索引標籤。
在 目前分支的 [歷程記錄] 索引標籤中,以滑鼠右鍵按一下您想要重設的提交,然後選擇 [重設刪除變更 (--hard)],將分支重設為所選提交,並刪除該提交後所有分支檔案的所有變更。 或者,選擇 重置 > 保留變更 (--mixed) 以將分支重設為選取的提交,並將所有後續變更保留為未放入暫存區的變更。
在 Team Explorer 的 [變更] 檢視中,選擇 [動作>檢視歷程記錄] 以開啟最新分支的 [歷程記錄] 索引卷標。
在目前分支的 [歷程記錄] 索引標籤中,右鍵按下想要重設的提交,然後選擇 [重設刪除變更 (--hard)],將分支重設為所選提交,並刪除自該提交以來所有分支檔案的所有變更。 或者,選擇 重設 > 保留變更 (--mixed) 將分支重設為選取的提交,並將所有後續變更保留為未分階段的變更。
您可以使用 Git reset 將分支還原到之前提交中的狀態。 Git reset 命令可以搭配各種旗標使用:
- 標誌
--hard 指示 Git 將分支重設為指定的提交,並捨棄所有隨後的變更。 請小心使用此選項,因為您可以使用此選項遺失工作。
- 標誌
--mixed 告知 Git 將分支重設為指定的提交,但保留所有後續變更為未暫存的變更。 這個選項是預設值。
- 標誌
--soft 會指示 Git 將分支重置為指定的提交,並保留所有後續變更為已暫存和未暫存的變更,根據其先前狀態保持原狀。
Git reset 的常見用法是使用 --hard 選項,以捨棄自上次提交以來所有檔案中所有未提交的變更:
git reset --hard
若要將分支強制重置為與最後一次提交不同的提交,請指定可唯一識別該提交的完整提交 ID 或部分提交 ID:
git reset --hard <commit ID>
如需尋找認可標識碼的詳細資訊,請參閱 尋找認可標識符。
復原共享認可所做的變更
您可以使用 Git 復原 來回復提交所做的變更,以創建反向變更的新提交。 Git revert 不會刪除原始提交。 此方法適用於復原共享提交所做的變更,因為 Git revert 不會改變先前的提交歷程記錄,因此本機和遠端分支歷程記錄會繼續相符。
從功能表欄中,選擇 [Git > 檢視分支歷程記錄 ] 以開啟 最新分支的 [歷程記錄 ] 索引標籤。
在最新分支的 [ 歷程記錄 ] 索引標籤中,以滑鼠右鍵按下您要還原的認可,然後選擇 [還原 ] 以建立新的認可,以復原所選認可所做的變更。
在 Team Explorer 的 [變更] 檢視中,選擇 [動作>檢視歷程記錄] 以開啟最新分支的 [歷程記錄] 索引卷標。
在最新分支的 [ 歷程記錄 ] 索引標籤中,以滑鼠右鍵按下您要還原的認可,然後選擇 [還原 ] 以建立新的認可,以復原所選認可所做的變更。
您可以使用 Git revert 命令來還原提交所做的變更,並通過反向變更找到新的提交。 其變更已被還原的提交仍然會保留在 Git 歷程記錄中。
git revert <commit ID>
如果還原操作成功,Git 會開啟編輯器視窗,提示您輸入新提交的提交訊息。
如果還原作業期間發生衝突,Git 會通知您。 您可以先解決衝突,然後執行 git revert --continue,或者執行 git revert --abort 來取消還原操作。
找到提交 ID
您可以使用 Git log 命令來取得提交 ID。 標誌 --oneline 可簡化輸出。
git log --oneline <branch>
Git log 命令會從指定分支的頭端開始,列出最新的提交記錄(如果未指定,則從當前分支),然後逐一回溯祖先提交。 簡化輸出中的每個提交 ID 都是能夠唯一識別提交的部分 SHA-1 檢查碼。 例如, git log --oneline main 可能會輸出:
e745d06 (HEAD -> main) Add a test initialization class
31da50b Add network switch test
0c14391 Add readme file
32e3946 Add project files.
下一步
相關文章