撤消更改
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
如果要撤消 Git 存储库中的更改,请先确定要撤消的更改类型。 例如,您可能希望:
- 通过将文件还原到其上次提交的版本来放弃对文件所做的未提交的更改。 还可将文件还原到任何已提交的版本。
- 通过将分支重置为先前的提交来将其还原到以前的状态。
- 通过创建用于撤消更改的新提交来撤消由共享提交所做的更改。 由于此方法不会重写现有的提交历史记录,因此适用于撤消由其他人推送并正在使用的提交所做的更改。
- 修改上次提交以修改其内容或消息。 有关详细信息,请参阅如何更新上次提交。
- 通过创建包含修补程序的新提交来修复先前提交中引入的问题。 有关详细信息,请参阅如何创建提交。
本文介绍如何执行以下操作:
- 放弃对文件所做的未提交的更改
- 将分支还原到之前的状态
- 撤消由共享提交所做的更改
如果对文件进行了更改但尚未提交这些更改,则可以使用 Git checkout 快速放弃更改并将文件还原为其上次提交的版本。
如果指定提交 ID,Git checkout
还可以将文件还原为任何已提交的版本。
警告
如果可能想要重新应用 Git checkout
将放弃的更改,请考虑改为储藏这些更改。
Visual Studio 2022 通过使用 Git 菜单、Git 更改和解决方案资源管理器中的上下文菜单提供 Git 版本控制体验。 Visual Studio 2019 版本 16.8 还提供了团队资源管理器 Git 用户界面。 有关详细信息,请参阅 Visual Studio 2019 - 团队资源管理器选项卡。
Visual Studio 支持通过将文件还原到其上次提交的版本来放弃对文件所做的未提交的更改。
在 Git 更改窗口中,确定包含要放弃的更改的文件。 如果文件位于暂存更改部分,请右键单击该文件并选择取消暂存。 非暂存文件显示在更改部分。
如果文件位于更改部分,请右键单击该文件并选择撤消更改,以放弃自上次提交以来对该文件所做的所有更改。
Visual Studio 支持通过将文件还原到其上次提交的版本来放弃对文件所做的未提交的更改。
在团队资源管理器的更改视图中,确定包含要放弃的更改的文件。 如果文件位于暂存更改部分,请右键单击该文件并选择取消暂存。 非暂存文件显示在更改部分
如果文件位于更改部分,请右键单击该文件并选择撤消更改,以放弃自上次提交以来对该文件所做的所有更改。
通过将文件还原到其上次提交的版本,可使用 Git checkout
命令来放弃对文件所做的未提交的更改:
git checkout <file>
例如,git checkout README.md
放弃对 README.md
文件所做的未提交的更改。
如果指定唯一标识提交的部分或完整提交 ID,Git checkout
还支持将文件还原到之前提交的版本:
git checkout <commit ID> <file>
有关查找提交 ID 的详细信息,请参阅查找提交 ID。
备注
使用 Git checkout
命令还原文件与其典型用途不同,后者是在分支之间切换。 checkout
命令输出将告知你它是正在分支之间切换还是正在更新文件,如果不清楚你正在尝试执行哪个操作,则会发出警告。
可使用 Git reset 将分支重置为之前的提交,从而将分支还原到之前的状态。 Git reset
会影响所有分支文件夹中的所有文件。
Git reset
有几个选项。 默认选项是将分支还原到之前的提交,但将所有后续更改保留为未提交的更改。 另一个选项是通过放弃自该提交以来对所有分支文件所做的所有更改,将分支还原到之前的提交。
警告
如果最后一次提交已推送并与其他人共享,则不要将分支重置为上次提交之前的提交。 这样做将导致本地分支历史记录不再与远程分支历史记录匹配。 对于共享分支,请参阅撤消由共享提交所做的更改。
从菜单栏中选择 Git > 查看分支历史记录,以打开当前分支的历史记录选项卡。
在当前分支的历史记录选项卡中,右键单击要重置的提交,然后选择重置>删除更改(--硬),将分支重置为选定的提交并删除自该提交以来对所有分支文件所做的所有更改。 也可选择重置 >保留更改(--混合),将分支重置为选定的提交并将所有后续更改保留为非暂存更改。
在团队资源管理器的更改视图中,选择操作 > 查看历史记录,打开当前分支的历史记录选项卡。
在当前分支的历史记录选项卡中,右键单击要重置的提交,然后选择重置 > 删除更改(--硬),将分支重置为选定的提交并删除自该提交以来对所有分支文件所做的所有更改。 也可选择重置 > 保留更改(--混合),将分支重置为选定的提交并将所有后续更改保留为非暂存更改。
可使用 Git reset
将分支还原到其上次提交的状态。 Git reset
命令可以与各种标志一起使用:
--hard
标志告知 Git 将分支重置为指定的提交,并放弃所有后续更改。 请谨慎使用此选项,因为使用它可能会丢失工作。
--mixed
标志告知 Git 将分支重置为指定的提交,但将所有后续更改保留为非暂存更改。 此选项为默认值。
--soft
标志告知 Git 将分支重置为指定的提交,但根据所有后续更改之前的状态将它们保留为暂存更改和非暂存更改。
Git reset
的一个常见用法是,使用 --hard
选项放弃自上次提交以来所有文件中的所有未提交的更改:
git reset --hard
要将分支硬重置为与上次提交不同的提交,请指定唯一标识提交的提交 ID 或部分提交 ID:
git reset --hard <commit ID>
有关查找提交 ID 的详细信息,请参阅查找提交 ID。
可通过使用 Git revert 创建用于撤销由提交所做的更改的新提交来撤消这些更改。 Git revert
不会删除原始提交。 此方法适用于撤消由共享提交所做的更改,因为 Git revert
不会更改以前的提交历史记录,因此本地分支历史记录和远程分支历史记录继续匹配。
从菜单栏中选择 Git > 查看分支历史记录,以打开当前分支的历史记录选项卡。
在当前分支的历史记录选项卡中,右键单击要还原的提交并选择还原,以创建可撤消由所选提交所做的更改的新提交。
在团队资源管理器的更改视图中,选择操作 > 查看历史记录,打开当前分支的历史记录选项卡。
在当前分支的历史记录选项卡中,右键单击要还原的提交并选择还原,以创建可撤消由所选提交所做的更改的新提交。
可使用 Git revert
命令撤消由提交所做的更改,并使用已撤消的更改创建新的提交。 其更改已撤消的提交保留在 Git 历史记录中。
git revert <commit ID>
如果还原操作成功,Git 将打开一个提示为新提交输入提交消息的编辑器窗口。
如果在还原期间出现冲突,Git 将通知你。 你可以解决冲突,然后运行 git revert --continue
,也可以运行 git revert --abort
来撤消还原操作。
可使用 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.